我有一个需要迭代的Python集,对于每个元素,检查它是否满足约束,如果满足,则将其删除并将其添加到另一个可能已经非空的集合中。我可以将其添加到缓冲区,然后在循环完成后,迭代缓冲区并从集合中删除其内容,但必须有更好的方法来执行此操作。
这是我正在尝试做的事情:
for elem in S:
if (P(elem)):
S.remove(elem)
T.add(elem)
这不起作用。
这是可行但不干净的修复:
B = set()
for elem in S:
if (P(elem)):
B.add(elem)
T.add(elem)
for elem in B:
S.remove(elem)
编辑: 最好的解决方案似乎是:
for elem in S.copy():
if (P(elem)):
S.remove(elem)
T.add(elem)
最佳答案
对于列表,在迭代之前创建一个副本:
for elem in S[:]:
其中 [:]
切片符号创建完整列表的副本。否则,您无法在迭代列表时从列表中删除元素。
关于java - java的iterator.remove()如何翻译成python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309160/