在 python 中,哪些容器在迭代期间正确支持突变?
例如:
container = [1, 2, 3, 4]
for i in container:
print(i)
if i == 2:
container.append(8)
输出1 2 3 4 8
(可以在迭代期间附加列表)。
但是,如果我.append(8)
用.remove(1)
输出代替1 2 4
(即元素3
被跳过)。似乎列表迭代超出了索引而不是元素,因此只有后续列表项(而不是先前的列表项)可以在迭代期间安全地删除。
标准库中是否有任何容器允许在迭代期间添加和删除元素,其行为是:
新元素确实会被迭代(对于list.append
),
移除的元素随后不会被迭代,
一个元素是否被迭代(或不被迭代)永远不会受到其他元素的添加/删除的影响。
我想到的应用程序是事件回调的注册表。触发时,我希望回调能够急切地注册或取消注册同一事件的其他回调。(例如,如果我迭代了容器的临时副本,我需要等待事件再次触发,然后更改开始生效。)
青春有我
holdtom
相关分类