java的迭代器.remove()转换为python?

2024-04-20 11:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个需要迭代的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)

Tags: 方法inadd元素编辑内容forif
3条回答

一种方法是使用列表理解来创建T,然后从S中删除T中的所有元素。你知道吗

T = set([elem for elem in S if P(elem)])
S = S - T

对于列表,请在迭代之前创建一个副本:

for elem in S[:]:

其中[:]切片表示法创建完整列表的副本。否则,在遍历列表时不能从列表中删除元素。你知道吗

如果对列表进行两次迭代并对每个项调用P()两次不是问题,那么这将是最具可读性的解决方案:

T = [x for x in S if P(elem)]
S = [x for x in S if not P(elem)]

相关问题 更多 >