2016-09-27 139 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中的当前值。

相关问题