Python 列表值替换未按预期工作
对于以下代码Python 列表值替换未按预期工作,python,list,Python,List,对于以下代码 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],为什么 for i in L: 这将迭代列表中的值;i、 e.1、2、3等 但是您正在使用这些值作为列表中的索引。所以结果不是你所期望的。 你基本上在做: L[1] = 2 L[2] = 2 ... 您可能想要: for i in range(len(L)): 您的列表(L)值在循环时正在更改,因此
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]
,为什么
for i in L:
这将迭代列表中的值;i、 e.1、2、3等
但是您正在使用这些值作为列表中的索引。所以结果不是你所期望的。
你基本上在做:
L[1] = 2
L[2] = 2
...
您可能想要:
for i in range(len(L)):
您的列表(L
)值在循环时正在更改,因此您访问的不是值1
、2
、3
等,而是不同的值
如果分解每个迭代,它可能会变得更清晰
第一次迭代:
i=1
(L
中的第一个值),L
将索引1
更新为2(因此没有更改):
第三次迭代:
i=2
(现在是L
中的第三个值),L
将索引2
更新为2(因此没有更改):
第五次/最后一次迭代:
i=4
(L
中的新第五个值),L
将索引4
更新为2(因此没有更改):
您不应该在
之后为L中的i执行L[i]
。为什么?
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
查找返回对象的标识
- 您还可以在第二个列表中多次看到
4436993488
。这将显示在哪里进行替换
- 列表中的这3个被2替换,只有这
4
有机会被替换。所以L[4]
从未发生过李>
在循环中添加打印(i,L)
,您将自己看到。铅笔和纸张时间:)只需在每次迭代结束时写出数组的值即可。否,因为如果您将位置2上的元素更改为2,则此设置将始终设置为L[2]=2
。请编辑您的问题:(1)使其具有更具体的标题;(2) 包括解释为什么你期望事情会有不同的表现。谢谢。是的,我使用列表值作为索引,但我不明白为什么L[3]是4而不是2。如果我没有弄错的话,循环应该是这样的:L[1]=2l[2]=2l[3]=2l[4]=2因为你把每个值都设置为2
你永远不会到达L[3]
,所以它保持不变。您总是在更改L[1]
,L[2]
或L[4]
精彩的解释!现在我觉得这很有道理。我没有考虑更改后列表中的第三个值是2。非常感谢你
L = [1, 2, 2, 4, 5]
L = [1, 2, 2, 4, 5]
L = [1, 2, 2, 4, 2]
L = [1, 2, 2, 4, 2]
[1, 2, 2, 4, 2]
>>> 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
>>>