java - java的iterator.remove()如何翻译成python?

标签 java python concurrency iterator

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

相关文章:

ios - 如何处理 Swift 中的竞争条件读/写问题?

java - 防止Java沙箱中的恶意代码

java - 如何避免在列表迭代中使用 get(0)

Python doit : Create subtasks using file generated from previous task

performance - 我应该学习哪种新语言来进行高性能,高并发的Web开发?

multithreading - 为什么名称为 "monitor"?

java - 在运行时获取 Maven 工件版本

java - Intellij 不询问是否在同一窗口或不同窗口中打开项目

python - 将预先存在的 django git 存储库部署到 heroku

python - from __future__ import ... 可以保证 Python 2 和 3 的兼容性吗?