python - 将对象转换为列表列表中的浮动对象

muf*_*man 1 python python-3.x

我正在尝试用 Python 3 编写一个程序,其中用户在一个输入中给出多个值,并用空格分隔,这些值以列表的形式添加到列表中,从而创建一个列表列表。但我无法将这些值转换为浮点数。

这是代码的“基础”:

lst = []
ln = input()
values = ln.split(" ")
lst.extend([values])
while ln != "":
    ln = input()
    values = ln.split(" ")
    lst.extend([values])
Run Code Online (Sandbox Code Playgroud)

这会给我这样的列表

[['1', '2'], ['3', '4']]
Run Code Online (Sandbox Code Playgroud)

所以问题是我无法将这些字符串转换为浮点数。我尝试过的方法之一是

for i in lst:
    for j in i:
        j = float(j)
Run Code Online (Sandbox Code Playgroud)

这只是给了我"ValueError: could not convert string to float:"。我也尝试过映射,但这也不起作用。

tim*_*geb 5

最直接的方法是在将子列表附加到最终列表之前将子列表中的字符串转换为浮点数。这意味着使用

values = list(map(float, ln.split(" ")))
Run Code Online (Sandbox Code Playgroud)

或者,您可以像这样对列表列表进行后处理:

>>> 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]]
Run Code Online (Sandbox Code Playgroud)

...它还有一个嵌套列表理解版本:

>>> [[float(x) for x  in sublist] for sublist in lst]
[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]
Run Code Online (Sandbox Code Playgroud)

...如果你是 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]]
Run Code Online (Sandbox Code Playgroud)

此外,但不相关,请使用lst.append(values)而不是lst.extend([values]). 效果是相同的,但后一个看起来很奇怪,并且违背了预期的用例extend- 从一个可迭代对象中逐一追加对象,您可以通过values传递 . 将可迭代对象包装在另一个可迭代对象中来抑制这种情况[values]