【发布时间】:2013-01-13 22:52:12
【问题描述】:
我有一个需要迭代的 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)
【问题讨论】:
-
从上下文来看,我猜你正在处理一个 list,而不仅仅是任何可迭代的(通常不是直接可寻址或可变的)。
-
此功能称为“分区”;然而,我知道没有这样的标准 Python 构造,尽管它很容易创建。请参阅stackoverflow.com/questions/4578590/…(其中一些允许惰性迭代器;其他强制评估)
标签: java python concurrency iterator