【发布时间】:2023-01-11 13:44:54
【问题描述】:
代码 1
>>> L=[0,1,2,3]
for i in range(len(L)):
print(f"Counter {i}")
for j in range(len(L)):
print(j)
if len(L)==4:
L.remove(2)
L.remove(3)
else:
pass
[Output] Counter 0
0
1
2
3
Counter 1
0
1
Counter 2
0
1
Counter 3
0
1
代码 2
>>> L=[0,1,2,3]
for i in L:
print(f"Counter {i}")
for j in L:
print(j)
if len(L)==4:
L.remove(2)
L.remove(3)
else:
pass
[Output] Counter 0
0
1
Counter 1
0
1
这两个代码相似,但它们给出不同的结果。
在第一个代码中,L 的长度为 4,因此变量一世在第一个 for 循环中将取值 0、1、2 和 3。对于 i=0,j 再次可以取 4 个值。但是在第二个循环中,我们将列表的长度设为 2。因此,当 i=1 时,这种效果将反映出来,依此类推,从代码的输出中可以看出。
但是在第二个代码中,在第二次循环中删除了列表的两个元素后,其效果在第二次循环的下一次迭代中变得透明。
为什么会这样?我无法理解我们是否使用对于我在范围内(len(L))或者对于我在 L,其效果在2个代码的输出中应该是相同的。在第一个代码中,删除列表 range(L) 的两个元素后不会立即改变,而在第二个代码中我们得到不同的输出。
有人可以解释为什么会这样吗?
【问题讨论】:
-
for i in range(len(L))->for i in range(4)for i in L->for i in [0,1,2,3] -
你的第一个代码是如何工作的 4 不在列表中,你正试图使用
.remove从列表中删除,这会出错。 -
非常抱歉。我已经编辑了代码。复制和粘贴代码时出现一些问题。
标签: python python-3.x loops for-loop data-structures