我必须犯一些愚蠢的错误,但是我真的不知道为什么它会这样工作。谁能向我解释一下?
placement = [0]*4
for image in placement:
image = 1
print(placement)
输出:[0, 0, 0, 0]
答案 0 :(得分:2)
当你说:
image = 1
您仅更改名为image
的变量的值;换句话说,您要将名称 image
绑定到新值。这根本不影响原始列表。
更详细地讲:当您说for image in placement
时,发生的是在for
循环的每次迭代中,名称image
被绑定到该位置中适当位置的值。名单。再次为其分配仅将其重新绑定到其他值。
上面的for
循环等效于:
image = placement[0]
image = 1 # does not change placement[0]
image = placement[1]
image = 1 # does not change placement[1]
image = placement[2]
image = 1 # does not change placement[2]
image = placement[3]
image = 1 # does not change placement[3]
要更改列表中的项目,您可以分配给特定索引:
for i in range(len(placement)):
placement[i] = 1 # assigns into a specific position in the list, changing its contents
答案 1 :(得分:2)
在数组上使用for in
进行迭代时,如果每次迭代修改结果元素都不会影响原始数组。
使用enumerate
遍历带有索引的数组并分配索引
for index, image in enumerate(placement):
placement[index] = image + 1