3 回答
TA贡献1796条经验 获得超10个赞
您的 list ( L
) 值在您循环时会发生变化,因此您不会访问 values 1
、2
、3
等...,而是访问不同的值。
如果你分解每个迭代,它可能会变得更清晰
第一次迭代:( i = 1
中的第一个值L
),将L
索引更新1
为 2(因此没有更改):
L = [1, 2, 3, 4, 5]
第二次迭代:( i = 2
中的第二个值L
),将L
索引更新2
为 2:
L = [1, 2, 2, 4, 5]
第三次迭代:( i = 2
现在是 中的第三个值L
),将L
索引更新2
为 2(因此没有更改):
L = [1, 2, 2, 4, 5]
第四次迭代:( i = 4
中的第四个值L
),将L
索引更新4
为 2:
L = [1, 2, 2, 4, 2]
第五次/最后一次迭代:
i = 4
(新的 fith 值L
),将L
index 更新4
为 2(所以没有变化):
L = [1, 2, 2, 4, 2]
因此,您的结果列表如下:
[1, 2, 2, 4, 2]
TA贡献1817条经验 获得超6个赞
你不应该这样做L[i]
之后for i in L
。为什么?
i
表示此列表中的一个项目,而不是此列表的索引。
在您的循环中,您将每个项目用作 L 的索引,以用 2 替换它们的值。
为什么4
在[1, 2, 2, 4, 2]
?
项目的索引号
4
是3
。
证明
>>> L = [1, 2, 3, 4, 5]
>>> for i in L:
... print(id(i))
...
4436993456
4436993488
4436993520
4436993552
4436993584
>>> for i in L:
... L[i] = 2
...
>>> for i in L:
... print(id(i))
...
4436993456
4436993488
4436993488
4436993552
4436993488
>>>
id去寻找Return the identity of an object
您还可以看到4436993488在第二个列表中多次找到。这显示了您的替换完成的位置。
列表中的这 3 个被 2 替换,只是这个4有机会被替换。所以L[4]从来没有发生过!!
TA贡献1802条经验 获得超6个赞
for i in L:
这会遍历列表中的值;即1、2、3等。
但是您将这些值用作列表中的索引。所以结果不是你所期望的。你基本上在做:
L[1] = 2
L[2] = 2
...
你可能想要:
for i in range(len(L)):
添加回答
举报