1

我需要在迭代列表时从列表中删除元素(我无法创建新列表,因为它在我无法控制的代码中被引用)。

我想出的最好的是:

last_index = len(somelist) - 1
for (index,item) in enumerate(reversed(somelist)):
    if somecondition(item):
        del somelist[last_index - index]

有更好的选择吗?我已经看过这篇文章和这篇文章,但是提供的解决方案都没有那么高效或简洁(恕我直言)。

4

1 回答 1

2

您可以使用列表理解+切片分配,这当然更简洁——我不知道效率(尽管我希望它在这方面做得更好,因为您不需要在每次删除项目时列出...)

somelist[:] = [ x for x in somelist if not somecondition(x) ]
于 2013-02-07T16:09:20.213 回答