列表值替换未按预期工作

对于下面的代码


L = [1, 2, 3, 4, 5]

for i in L:

    L[i] = 2

print(L)

我预计结果是[1, 2, 2, 2, 2]


但是收到了[1, 2, 2, 4, 2],为什么?


不负相思意
浏览 128回答 3
3回答

白衣染霜花

您的 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]

慕的地6264312

你不应该这样做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))...44369934564436993488443699352044369935524436993584>>> for i in L:...     L[i] = 2...>>> for i in L:...     print(id(i))...44369934564436993488443699348844369935524436993488>>>id去寻找Return the identity of an object您还可以看到4436993488在第二个列表中多次找到。这显示了您的替换完成的位置。列表中的这 3 个被 2 替换,只是这个4有机会被替换。所以L[4]从来没有发生过!!

呼啦一阵风

for i in L:这会遍历列表中的值;即1、2、3等。但是您将这些值用作列表中的索引。所以结果不是你所期望的。你基本上在做:L[1] = 2L[2] = 2...你可能想要:for i in range(len(L)):
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python