这是一个非常简单的问题,但我不知道为什么python会这样做。对于下面的循环,if head != None...
正在创建一个局部变量,以致head += 1
不会修改for head in myHeap.array
中的头部。在头+ + 1之后添加一个打印(头)产生我想要的结果,但if语句之外的头保持不变。
for head in myHeap.array:
if head != None and count % int(grow) == 0:
head += 1
所以输入myHeap.array = [2,2,2,1]在迭代结束时输出相同的列表,当预期为[3,3,3,2]时。我还验证了if语句满足条件,解释器使用head += 1
行
答案 0 :(得分:5)
您需要访问myHeap.array列表的元素才能修改它们。像这样:
class myHeap(object):
pass
myHeap.array = [2, 2, 2, 1]
for n, head in enumerate(myHeap.array):
if head != None:
myHeap.array[n] = head + 1
print myHeap.array
输出:
[3, 3, 3, 2]
答案 1 :(得分:1)
运行此命令并仔细查看生成的ID。
listt = [2, 3]
for i in listt:
print(id(i))
i += 1
print(id(i))
print()
print(listt)
print()
for i in range(len(listt)):
print(id(listt[i]))
listt[i] += 1
print(id(listt[i]))
print()
print(listt)
您的代码中发生的事情是临时变量中的对象引用已更新,因此它不再包含对列表中对象的引用。因此,您没有在列表中看到更改。您需要更新列表元素中的引用。为此,您需要直接访问这些变量,即通过下标。