将浮动分成数字

时间:2015-04-21 11:06:19

标签: python string list

我有一个浮动:

pi = 3.141

想要将float的数字分开并将它们放入列表中作为这样的整数:

#[3, 1, 4, 1]

我知道将它们分开并将它们放入列表但是作为字符串并且这对我没有帮助

2 个答案:

答案 0 :(得分:7)

您需要遍历数字的字符串表示并检查数字是否为数字。如果是,则将其添加到列表中。这可以通过使用列表理解来完成。

>>> pi = 3.141
>>> [int(i) for i in str(pi) if i.isdigit()]
[3, 1, 4, 1]

使用Regex(非优先)

的另一种方式
>>> map(int,re.findall('\d',str(pi)))
[3, 1, 4, 1]

最后一种方式 - 暴力

>>> pi = 3.141
>>> x = list(str(pi))
>>> x.remove('.')
>>> map(int,x)
[3, 1, 4, 1]

很少有来自文档的参考资料

timeit结果

python -m timeit "pi = 3.141;[int(i) for i in str(pi) if i.isdigit()]"
100000 loops, best of 3: 2.56 usec per loop
python -m timeit "s = 3.141; list(map(int, str(s).replace('.','')))" # Avinash's Method
100000 loops, best of 3: 2.54 usec per loop
python -m timeit "import re;pi = 3.141; map(int,re.findall('\d',str(pi)))"
100000 loops, best of 3: 5.72 usec per loop
python -m timeit "pi = 3.141; x = list(str(pi));x.remove('.'); map(int,x);"
100000 loops, best of 3: 2.48 usec per loop

正如您所见,蛮力方法是最快的。众所周知的正则表达式答案是最慢的。

答案 1 :(得分:4)

您还可以使用string.replace以及maplist个函数。

>>> s = 3.141
>>> list(map(int, str(s).replace('.','')))
[3, 1, 4, 1]