Python3 input()浮动列表

时间:2014-05-23 15:53:26

标签: python list python-3.x input floating-point-precision

如果我在这里遗漏了一些简单的事情,我很抱歉,但我不明白......

list_rho = []
# start some sort of loop
val = input() 
list_rho.extend(val)

使用此代码,我试图创建一个rho值列表:用户输入一个浮点数。然后将其添加到列表中。 例如用户输入值0.10, 0.15, 0.20, 0.30, 0.35

但是,当我打印列表时,它显示如下:

0,  .,  1,  0,  0,  .,  1,  5,  0,  .,  2,  0,  0,  .,  2,  5,  0,  .,  3,  0,  0,  .,  3,  5

显然,不是我想要的。如果我尝试将输入值括在引号中或者首先将用户输入转换为字符串,则会发生同样的情况。

有人可以解释这是怎么回事?

N.B。我可以使用一个循环来表示rho的值,但是,在我的最终用途中,小数位数很重要,我知道在基数2中没有精确表示0.1的方法......

2 个答案:

答案 0 :(得分:3)

如果你想保留字符串,你可以这样做:

list_rho.extend(val.split(", "))

或者,要转换为浮点数:

list_rho.extend(map(float, val.split(", ")))

input总是为您提供一个字符串,并list.extend对其参数进行迭代,分别添加每个项目,因此list.extend("foo")相当于list.extend(['f', 'o', 'o'])

>>> l = []
>>> l.extend("hello, world")
>>> l
['h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd']

>>> l = []
>>> l.extend("hello, world".split(", ")) # right
>>> l
['hello', 'world']

答案 1 :(得分:0)

input()返回一个字符串。

list_rho.extend期待一个列表。

"0, ., 1, 0, 0, ., 1, 5, 0, ., 2, 0, 0, ., 2, 5, 0, ., 3, 0, 0, ., 3, 5"是强制转换为列表的输入字符串。

>>> m = "0.10, 0.15, 0.20, 0.30, 0.35"
>>> m
'0.10, 0.15, 0.20, 0.30, 0.35'
>>> n = list(m)
>>> n
['0', '.', '1', '0', ',', ' ', '0', '.', '1', '5', ',', ' ', '0', '.', '2', '0', ',', ' ', '0', '.', '3', '0', ',', ' ', '0', '.', '3', '5']
>>> g = []
>>> g.extend(m)
>>> g
['0', '.', '1', '0', ',', ' ', '0', '.', '1', '5', ',', ' ', '0', '.', '2', '0', ',', ' ', '0', '.', '3', '0', ',', ' ', '0', '.', '3', '5']