我在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)
我尝试做的是转换lst1
,lst2
和lst3
中的所有字符串变量,这些变量都是列表numbers
中的所有子列表,整数。我使用map()
函数通过遍历每个列表并转换列表来实现此目的,但不知何故,它无法正常工作。
现在,我使用以下代码尝试了另一种方法:
numbers = [list(map(int, lst)) for lst in numbers]
由于某种原因,这是有效的。有谁知道为什么前面的代码不起作用而后者呢?我只是想绕过它,以便我完全明白为什么它不起作用。
谢谢!
答案 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)