【问题标题】:Why is there a difference in the results of both the for loops?为什么两个 for 循环的结果存在差异?
【发布时间】:2022-01-25 07:00:33
【问题描述】:

两个 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]]

【问题讨论】:

  • 你能解释一下你期望得到什么吗?
  • 它不起作用的一个原因是因为您没有在第一个 for 循环中为 t 分配任何东西。所以t 不会改变。
  • @Ouroborus 绝对不正确。它确实为您提供了所有内置容器的对象本身,以及几乎任何您可能使用的实现迭代的容器,可能有一些例外,但绝对不是这里
  • "两个 for 循环完全相同" 不,它们根本不一样。
  • @juanpa.arrivillaga 是的,我意识到这是因为他们分配给 temp 变量,这当然不会影响原始列表。 (然后就是不允许修改您正在迭代的列表。)

标签: python arrays list for-loop


【解决方案1】:

第一个循环只是覆盖临时变量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 引用新数据。数组保持不变,除非您明确更改它 - 就像您在第二个循环中所做的那样。

【讨论】:

  • 非常感谢。这真的很有帮助
  • @teja - 不客气!
猜你喜欢
  • 2021-10-01
  • 2023-01-16
  • 1970-01-01
  • 2013-12-12
  • 2021-04-03
  • 2015-06-17
  • 1970-01-01
  • 2022-01-25
  • 2022-01-25
相关资源
最近更新 更多