在迭代它时删除列表元素

时间:2013-02-07 16:04:46

标签: python

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

我提出的最好的是:

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

有更好的选择吗?我也见过这个postone,但所提供的解决方案都没有那么有效或简洁(恕我直言)。

1 个答案:

答案 0 :(得分:2)

你可以使用列表理解+切片分配,这当然更简洁 - 我不知道效率(虽然我希望它在这方面做得更好,因为你不需要继续转移每次删除项目时列表中的元素...)

somelist[:] = [ x for x in somelist if not somecondition(x) ]