【发布时间】:2013-01-23 05:07:11
【问题描述】:
我需要在迭代列表时从列表中删除元素(我无法创建新列表,因为它在我无法控制的代码中被引用)。
我想到的最好的是:
last_index = len(somelist) - 1
for (index,item) in enumerate(reversed(somelist)):
if somecondition(item):
del somelist[last_index - index]
【问题讨论】:
-
您希望更简洁高效多少? Alex Martelli's answer 似乎两者兼而有之。与意见相关的问题不适合 Stack Overflow。
-
您确定您的代码确实有效吗?初始化
somelist到range(100)和somecondition(item)到item % 2,我最终得到一个 IndexError。 -
@mgilson 我的第一个想法是应该是
del somelist[-index](和enumerate(...,start=1))否则,我能想到的所有方法都已经在上一篇文章中介绍过 -
@isedev 我不确定效率,但你也可以做 somelist.remove(item) 而不是反转和枚举。
-
@JonClements -- 很遗憾这是一个骗子 -- 我最终可能会得到一个
great answer徽章:O)
标签: python