2016-09-27 140 views
2

我正在循環瀏覽此列表,但不明白爲什麼print(d)返回seed中的每個數字,但分配i["seed"] = d會指定seed的最後一個元素。如何在for循環操作中訪問列表中的每個元素?

如何訪問seed中除print()之外的其他操作的每個元素?

res = [] 
seed = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
i = {} 
for d in seed: 
    print(d) 
    i["seed"] = d 
    res.append(i) 
print(res) 

謝謝!

+1

'我['seed'] = d'應該做什麼? – hpaulj

+0

其添加關鍵種子的字典,(正在被覆蓋) – Corgs

回答

0

問題是隻有一個對象i,並且每次在循環中都要替換它的值。通過最後一次迭代,我的一個實例將其值設置爲您分配給它的最後一個項目。每次追加到res時,基本上都會將指針附加到同一個對象上(所以當循環完成時,最終會有9個指針指向同一個對象)。

res = [] 
seed = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
i = {} 
for d in seed: 
    print(d) 
    i["seed"] = d # this gets replaced every time through your loop! 
    res.append(i.copy()) # need to copy `i`, or else we're updating the same instance 
print(res) 
0

要回答你的第一個問題,這是因爲種子thew值被覆蓋,如下所示:

>>> p = {'t':'H'} 
>>> p['t'] = 'k' 
>>> p 
{'t': 'k'} 

我對你問題的第二部分相混淆。精心製作更多?

1

問題在於你在哪裏定義我。我想認爲你打算有一個名爲i的字典對象,它具有名爲「seed」的單個屬性。並且您想要將這些字典添加到res。

實際上,您只有一個名爲i的字典,並且每次通過循環更新其中的值。

試試這個:

res = [] 
seed = [1, 2, 3, 4, 5, 6, 7, 8, 9] 

for d in seed: 
    i = {} 
    print(d) 
    i["seed"] = d 
    res.append(i) 
print(res) 

,將創建我的新實例爲每個循環,你應該得到你正在尋找的結果。

+0

感謝您的幫助,我應該已經創建我在循環內。乾杯。 – efbbrown

0

python中的大括號{}代表dictionaries,它基於鍵和值工作。每次迭代循環時,都會用列表種子的當前值覆蓋鍵:'seed'。因此,當循環結束時,列表的最後一個值是種子在字典i中的當前值。

相關問題