关于字符串中的数字显示为”非数字”或fals

numbers in string come out as “not numbers” or fals - Python

本问题已经有最佳答案,请猛点这里访问。

所以,我在python中有一个字符串列表,我试图找出哪些键是数字。我试图使用list.[key].isdigit(),但它只适用于'0'。例如:

1
list = ['0', '0', '0', '0.450000000000000', '0', '0', '0', '0.550000000000000']

只确定'0'是数字,而'0.45''0.55'不是数字。我如何解决这个问题?

非常感谢你


您可以使用异常处理和函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> def is_num(x):
...     try :
...         float(x)
...         return True
...     except ValueError:
...         return False
...    
>>> lis = ['0', '0', '0', '0.450000000000000', '0', '0', '0', '0.550000000000000']
>>> for x in lis:
...     print is_num(x)
...    
True
True
True
True
True
True
True
True

您可以将"."替换为零,并检查它是否为数字,假设您在列表中只得到浮点数和整数…

1
2
3
4
5
6
7
8
9
>>> a
['0', '0.45']
>>> for each in a:
...     repl = each.replace('.','0')
...     if repl.isdigit():
...             print each
...
0
0.45


当空格和文本混合时,此选项将处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import re

def ok(val):
    m = re.match('\s*\d+\.?\d*\s*', val)
    if m and m.group(0) == val:
        return True
    return False

list = ['0', '0.450000000000000', '0', '23x', ' 2.7 ', '2. 7', '1.2.3']

for val in list:
    print ok(val), val

# True 0
# True 0.450000000000000
# True 0
# False 23x
# True  2.7
# False 2. 7
# False 1.2.3