我有一个需要迭代的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)
一种方法是使用列表理解来创建
T
,然后从S
中删除T
中的所有元素。你知道吗对于列表,请在迭代之前创建一个副本:
其中
[:]
切片表示法创建完整列表的副本。否则,在遍历列表时不能从列表中删除元素。你知道吗如果对列表进行两次迭代并对每个项调用
P()
两次不是问题,那么这将是最具可读性的解决方案:相关问题 更多 >
编程相关推荐