2015-11-29 33 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