为什么两个 for 循环的结果不同?

Why is there a difference in the results of both the for loops?

两个 for 循环完全相同,但我不明白为什么第一个 for 循环不起作用。

t = [[1,0],[2,0]]
z =  [[1,0],[2,0]]
for i in t:
    i = [x for x in i if x!=0]
for i in range(len(z)):
    z[i] = [x for x in z[i] if x!=0]
print(t)
print(z)

输出:

[[1, 0], [2, 0]]

[[1], [2]]

第一个循环只是覆盖临时变量 i 而不是将该数据写回数组。

for i in t:
    # saves data back to loop variable i 
    i = [x for x in i if x!=0]
for i in range(len(z)):
    # saves data to this index in array z
    z[i] = [x for x in z[i] if x!=0]

当你给i赋一个新值时,你并没有改变i最初引用的数据(数组t中的数据)。相反,您导致 i 引用新数据。数组保持不变,除非您明确更改它 - 就像您在第二个循环中所做的那样。