Deleting list elements whilst iterating over it
本问题已经有最佳答案,请猛点这里访问。
我需要在遍历列表时从列表中删除元素(我不能创建一个新列表,因为它在我无法控制的代码中被引用)。
我想到的最好办法是:
1 2 3 4 | last_index = len(somelist) - 1 for (index,item) in enumerate(reversed(somelist)): if somecondition(item): del somelist[last_index - index] |
有更好的选择吗?我也看过这篇文章和这篇文章,但是所提供的解决方案都没有那么高效或简洁(imho)。
你可以使用列表理解+切片分配,这当然更简洁——我不知道效率如何(尽管我希望它在这方面做得更好,因为你不需要每次删除一个项目时都在列表中移动元素…)
1 | somelist[:] = [ x for x in somelist if not somecondition(x) ] |