2015-11-29 57 views
0

我試圖在列表中存儲整數和浮點數,以便在第二時刻對它們進行處理。現在,我知道,在列表中的整數和浮點數這兩個命令在列表中查找整數和浮點數

A = map(int, re.findall('\d+', string1)) 
A = map(float, re.findall('\d+.\d+', string1)) 

但我怎麼能對其進行調整,以便讀取(和存儲按順序)?

+1

能'4.'和'.1'發生在你的名單?它們應該是有效的浮點數,但是當前的過濾器會忽略它們。 – usr2564301

+0

是的,我也面臨着這個問題... – james42

回答

1

使小數點部分可選:

A = map(lambda v: float(v) if '.' in v else int(v), 
     re.findall(r'\d+(?:\.\d+)?', string1)) 

請注意,我用的λ測試小數點轉換爲int,如果缺少它,我逃脫.匹配字面不只是任何字符,在正則表達式中.的正常含義。

演示:

>>> import re 
>>> s = '42 12.43 10' 
>>> map(lambda v: float(v) if '.' in v else int(v), re.findall(r'\d+(?:\.\d+)?', s)) 
[42, 12.43, 10] 
+0

我使用Python 2.7,當我把整數字符串,A是一個空的向量...此外,如果我輸入一個浮點數的字符串shell忽略整數部分(即將其設置爲零),並只給出小數點後的部分...... – james42

+0

@ james42:啊,我的錯誤。我做了這個團體*匿名*;我忘記了're.findall()'將返回組捕獲,而不是整個匹配,否則。 –

+0

整數部分的問題消失了,但讀者仍然忽略整數! – james42