Python将子列表中的所有项转换为整数

时间:2017-10-03 05:46:21

标签: python list

我在Python中有以下测试代码:

lst1 = ["1", "2", "3"]
lst2 = ["4", "5", "6"]
lst3 = ["7", "8", "9"]
numbers = [lst1, lst2, lst3]
for lst in numbers:
    lst = list(map(int, lst))
print (numbers)

我尝试做的是转换lst1lst2lst3中的所有字符串变量,这些变量都是列表numbers中的所有子列表,整数。我使用map()函数通过遍历每个列表并转换列表来实现此目的,但不知何故,它无法正常工作。

现在,我使用以下代码尝试了另一种方法:

numbers = [list(map(int, lst)) for lst in numbers]

由于某种原因,这是有效的。有谁知道为什么前面的代码不起作用而后者呢?我只是想绕过它,以便我完全明白为什么它不起作用。

谢谢!

6 个答案:

答案 0 :(得分:3)

for lst in numbers:
    lst = list(map(int, lst))

创建一个遍历lst的引用numbers,然后在每次迭代时将该引用重新分配给新列表,这不会更改原始列表的内容。

这与

的行为相同
x = 4
y = x
y = 2

不会更改x

的值

答案 1 :(得分:0)

您正在打印numbers,这是列表的原始列表,而不是lst,这是修改后的新列表。
尝试:

for lst in numbers:
    lst = list(map(int, lst))
    print (lst)



 >>> 
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
>>> 

答案 2 :(得分:0)

对于你尝试的第一个选项,你正在做

print(numbers)

这是您开始使用的列表中的原始列表。这就是问题所在。你应该已经完成​​了

print(lst)

代替。

希望这有帮助吗?祝你有美好的一天!

答案 3 :(得分:0)

这是关于更新循环内的数字变量(这根本不起作用)。我通常会这样做:

lst1 = ["1", "2", "3"]
lst2 = ["4", "5", "6"]
lst3 = ["7", "8", "9"]
numbers = [lst1, lst2, lst3]
for ind,lst in enumerate(numbers):
    numbers[ind] = list(map(int, lst))
print (numbers)

还发现这个问题似乎也回应了类似的问题。 How to modify list entries during for loop?

答案 4 :(得分:0)

在这种情况下,列表理解会更快

integer_list = [int(i) for j in numbers for i in j]

print(integer_list)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

timeit输出:

100000个循环,最佳3:每循环3.5μs

您也可以使用发电机

list_generator = (int(i) for j in numbers for i in j)
print(list(list_generator)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Timeit结果:

最慢的运行时间比最快的运行时长5.31倍。

这可能意味着正在缓存中间结果。 1000000次循环,最佳3:每循环359 ns

答案 5 :(得分:0)

在您编写的代码中,值正在lst变量中更新,而不是在数字列表中。但是其他代码可以工作,因为您创建了一个具有所需值的新数组,并将其分配给数字数组本身。 你也可以这样做 -

numbers = map(lambda x: map(int, x), numbers)