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),将Lindex 更新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)):
添加回答
举报
