Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将浮点数分隔为数字_Python_String_List - Fatal编程技术网

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]