Python 将浮点数分隔为数字
我有一个花车:Python 将浮点数分隔为数字,python,string,list,Python,String,List,我有一个花车: pi = 3.141 要将浮点数的数字分开,并将它们作为整数放入列表中,如下所示: #[3, 1, 4, 1] 我知道将它们分开并放入列表中,但作为字符串,这对我没有帮助您需要循环查看数字的字符串表示形式,并检查数字是否为数字。如果是,则将其添加到列表中。这可以通过使用列表理解来完成 >>> pi = 3.141 >>> [int(i) for i in str(pi) if i.isdigit()] [3, 1, 4, 1] 使用正则表
pi = 3.141
要将浮点数的数字分开,并将它们作为整数放入列表中,如下所示:
#[3, 1, 4, 1]
我知道将它们分开并放入列表中,但作为字符串,这对我没有帮助您需要循环查看数字的字符串表示形式,并检查数字是否为数字。如果是,则将其添加到列表中。这可以通过使用列表理解来完成
>>> pi = 3.141
>>> [int(i) for i in str(pi) if i.isdigit()]
[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
正如你所看到的,蛮力法是最快的。已知的正则表达式答案是最慢的。您也可以使用
字符串。将与映射
,列表
函数一起替换
>>> s = 3.141
>>> list(map(int, str(s).replace('.','')))
[3, 1, 4, 1]
浮点数的可能副本不是真正的十进制数字,而是二进制数字,pi
的十进制数字同样可能是3.1410000000000000141085471520020037174224853515625
(请尝试'.100f'%3.141
)我想这是因为你的代码检查每个字符是否是一个数字。我尝试了brite force方法,因为我不理解其他两个u,但列表仍然是字符串列表而不是整数:x=list(str(number))x.remove('.')map(int,x)return x(number是pi)结果:['3','1','4','1','5','9','2','6','5','3','5','9']@jojojo我肯定你错过了最后一句话。那就是map(int,x)
>>> s = 3.141
>>> list(map(int, str(s).replace('.','')))
[3, 1, 4, 1]