将str列表转换为int python列表

时间:2016-12-08 13:10:17

标签: python python-3.x

我有以下输入:

669  866  147
 15  881  210
662   15   70

在其上使用.split('\n'),我可以获得3个字符串的列表。然后我想将每个字符串分解为一个字符串列表,然后将它们转换为int。 我到目前为止尝试使用的代码是

for tr in numbers:
    tr = tr.split()
    tr = list(map(int, tr))

然而,在for循环关闭之后,原始列表没有发生任何事情,所以如果我运行此命令print(type(numbers[0])),它将返回<class 'str'>

我猜这是由于循环内部发生的操作所以外面没有任何改变,所以我怎样才能让原来的列表更新呢?

4 个答案:

答案 0 :(得分:2)

您必须将列表显式设置回数字列表,此时,您只需要通过重新分配来操作变量tr,因此原始列表不会受到影响。试试这个

>>> numbers = ["669  866  147", " 15  881  210", "662   15   70"]
>>> for idx, tr in enumerate(numbers):
...     tr = tr.split()
...     numbers[idx] = list(map(int, tr))
... 
>>> numbers
[[669, 866, 147], [15, 881, 210], [662, 15, 70]]

答案 1 :(得分:2)

这样的单行可能是这样的:

In [6]: numbers = "669 866 147\n15 881 210\n662 15 70"

In [7]: [[int(y) for y in x.split()] for x in numbers.split('\n')]
Out[7]: [[669, 866, 147], [15, 881, 210], [662, 15, 70]]

您可以将In [7]直接分配给数字,或分配到单独的新变量中。

答案 2 :(得分:0)

import re
numbers = ["669  866 ASSASSA 147", " 15  881  210", "662   15   70"]
numbers = [[int(_str) for _str in re.findall(r"\d+", o)] for o in numbers]
print numbers
# [[669, 866, 147], [15, 881, 210], [662, 15, 70]]

答案 3 :(得分:0)

Pythonic的方法是使用列表理解 - 避免枚举/索引,变异和范围内的新变量:

>>> numbers = ["669  866  147", " 15  881  210", "662   15   70"]
>>> numbers = [map(int, tr.split()) for tr in numbers]
>>> numbers
[[669, 866, 147], [15, 881, 210], [662, 15, 70]]

有些人避免使用内置map,在这种情况下,你可以用第二行代替:

numbers = [[int(n) for n in tr.split()] for tr in numbers]