如何在for循环操作中访问列表中的每个元素?

时间:2016-09-27 02:30:20

标签: python for-loop

我正在循环浏览此列表并且不理解为什么print(d)会返回seed中的每个数字,但指定i["seed"] = d会指定seed的最后一个元素。

如何访问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)

谢谢!

4 个答案:

答案 0 :(得分: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)

这将为每个循环创建一个新的i实例,你应该得到你想要的结果。

答案 1 :(得分:0)

问题是只有一个对象i,并且每次在循环中都会替换它的值。在最后一次迭代中,你的(一个实例)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)

答案 2 :(得分:0)

要回答你的第一个问题,那是因为种子的值被覆盖了,如下所示:

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

我对你问题的第二部分感到困惑。再详细说明一下?

答案 3 :(得分:0)

python中的大括号{}代表dictionaries,它基于键和值工作。每次遍历循环时,都会覆盖密钥:' seed'使用列表种子的当前值。因此,当循环结束时,列表种子的最后一个值是字典i中种子的当前值。