2016-12-15 81 views
0

下面是簡單的代碼:如何檢查列表中的元素「是」Python中的數字?

s = ['-1', '2', '+'] 
print([x.isnumeric() for x in s]) 
print([x.isdigit() for x in s]) 

輸出是

[False, True, False] 
[False, True, False] 

我希望是:

[True, True, False] 
+3

也許改爲使用一個函數,試圖轉換爲'int'並捕獲任何異常,在異常情況下返回False,否則返回True。 –

回答

4

它是一種不是一個襯墊,但是這個工程。

def isnum(x): 
    try: 
     float(x) 
     return True 
    except ValueError: 
     return False 

s = ['-1', '2', '+'] 
print([isnum(x) for x in s]) 
+5

我會使用'float'而不是'int';它將返回任意值爲Python的數字(int,float,科學記數法)而不是整數。 –

+0

Upvoted,因爲我正在研究相同的解決方案:D –

+3

_「它不是一個班輪,但它有效」_ - 我會在任何一天都用一行代碼讀取清晰的可讀代碼。 –

0
[x.isnumeric() or (x[0] == '-' and x[1:].isnumeric()) for x in s] 
+0

數字如「+ 1」或「+ 2」怎麼辦? –

+1

猜你可以做。 (' - ','+')'或類似的'x [0]。 –

1

您也可以使用正則表達式模式匹配陰性,陽性,十進制數:

>>> import re 
>>> s = ['-1', '2', '+'] 
>>> [re.match('^(-|\+)?\d+(.\d+)?', n) is not None for n in s] 
[True, True, False] 
>>> 
0

使用for循環和更換,你可以很容易地檢查在列表中的值是否是數字或不。

實施例:

list = ['-1','2','+'] 
result=[] 
for i in list: 
     if '-' in i: 
       result.append(i.replace('-','').isdigit()) 
     else: 
       result.append(i.isdigit()) 

輸出:

>>> list = ['-1','2','+'] 
>>> result=[] 
>>> for i in list: 
...   if '-' in i: 
...     result.append(i.replace('-','').isdigit()) 
...   else: 
...     result.append(i.isdigit()) 
... 
>>> print result 
[True, True, False] 

對於情況的數量是一個浮動或十進制,可以很容易地添加更多的if語句。

相關問題