簡體   English   中英

為什么 Python 循環返回每遍中的最后一個元素?

[英]Why is Python for loop returning last element in each pass?

我的問題標題不太正確,但下面的代碼應該足夠清楚。

instances = []
inst = {}
for i in range(4):
    print i
    inst['count'] = i
    instances.append(inst)
print instances

結果是

0
1
2
3
[{'count': 3}, {'count': 3}, {'count': 3}, {'count': 3}]

我期待着

[{'count': 0}, {'count': 1}, {'count': 2}, {'count': 3}]

我不明白什么?

inst變量的定義放在循環內。

instances = []
for i in range(4):
    inst = {}
    inst['count'] = i
    instances.append(inst)
print(instances)

正如@Mario Ishac 所說,您的 dict 聲明是在 for 循環之前完成的,因此您正在處理同一個字典。 將其添加到您的 for 循環中。 我已經測試過並且有效。

instances = []
for i in range(4):
    inst = {}
    print(i)
    inst['count'] = i
    instances.append(inst)
print(instances)

所以,這里發生的事情是,此時您要更新的字典是一個運行時變量,每次它在 for 循環中更新時,它也會更新其中存在的項目的值,以便最終的 output存在這個變量的地方都是一樣的。 考慮 list 和 dict 中的值不是硬編碼的值,而是動態的。

它可以通過在每次迭代中創建一個空字典來簡單地修復。 所以它不會覆蓋 memory 中的相同位置,並且會捕獲唯一值。

instances = []

for i in range(4):
    inst = {}
    print i
    inst['count'] = i
    instances.append(inst)
print instances

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM