我正在尝试在Python 3中创建一个程序,其中用户在一个以空格分隔的输入中提供多个值,这些值以列表的形式添加到列表中,从而创建列表列表。但我不能将这些值转换为浮动。
这是代码的“基础”:
lst = []
ln = input()
values = ln.split(" ")
lst.extend([values])
while ln != "":
ln = input()
values = ln.split(" ")
lst.extend([values])
哪个会给我这样的列表
[['1', '2'], ['3', '4']]
所以问题是我无法将这些字符串转换为浮点数。我试过的方法之一是
for i in lst:
for j in i:
j = float(j)
这只是给了我"ValueError: could not convert string to float:"
。我也尝试过映射,但这也不起作用。
答案 0 :(得分:2)
最直接的方法是在将子列表附加到最终列表之前将子列表中的字符串转换为浮点数。这意味着使用
values = list(map(float, ln.split(" ")))
或者,您可以对此列表进行后处理,如下所示:
>>> lst = [['1', '2', '3'], ['4', '5', '6']]
>>> lst = [list(map(float, sublist)) for sublist in lst]
>>> lst
[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]
...还有一个嵌套的列表理解版本:
>>> [[float(x) for x in sublist] for sublist in lst]
[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]
...如果您是Python的新手,可能想写为
>>> lst = [['1', '2', '3'], ['4', '5', '6']]
>>> result = []
>>>
>>> for sublist in lst:
... float_sublist = []
... for x in sublist:
... float_sublist.append(float(x))
... result.append(float_sublist)
...
>>> result
[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]
此外,但不相关,请使用lst.append(values)
代替lst.extend([values])
。效果是一样的,但后者看起来很奇怪,违背了extend
的预期用例 - 逐个追加迭代中的对象,你可以通过将可迭代的values
包装在另一个中来抑制通过传递[values]
来迭代。
答案 1 :(得分:1)
Python没有直观的方法来修改列表中的原始对象 - 很多时候最简单的方法就是创建一个新列表:
lst = [['1', '2'], ['3', '4']]
floatlist = []
for l in lst:
floatlist.append([float(i) for i in l])
print(floatlist)