【发布时间】:2019-11-22 14:13:23
【问题描述】:
考虑以下代码:
mylist = [
{'a': 1},
{'b': 2},
]
for el in mylist:
print(mylist)
x, y = el.popitem()
print(x, y)
我希望mylist 不会更改迭代(因此在打印时每次都相同),因为我正在处理作为当前迭代元素的变量,为什么要这样做。
输出是
[{'a': 1}, {'b': 2}]
a 1
[{}, {'b': 2}]
b 2
这意味着弹出迭代的当前值会影响迭代器本身。为什么会这样? (我猜这是因为当前元素是指向列表中元素的指针)
我应该如何迭代以使迭代列表不改变? (我需要popitem()当前元素来收集它的键和值)
【问题讨论】:
-
只是为了你的熏陶
mydict其实是list -
变量
el是列表中对象的名称(mydict是一个容易混淆的名称)。 -
@That1Guy:好的,我改了名字——我最初对这个例子有另一个想法
-
@PeterWood:好的,我改了名字——我最初对这个例子有另一个想法
-
这里的预期输出是什么?你可以做
for el in mylist: for key, value in el.items()
标签: python python-3.x iterator