Python 在迭代列表元素时删除列表元素
我需要在遍历列表时删除列表中的元素(我无法创建新列表,因为它在我无法控制的代码中被引用) 我想到的最好的办法是:Python 在迭代列表元素时删除列表元素,python,Python,我需要在遍历列表时删除列表中的元素(我无法创建新列表,因为它在我无法控制的代码中被引用) 我想到的最好的办法是: last_index = len(somelist) - 1 for (index,item) in enumerate(reversed(somelist)): if somecondition(item): del somelist[last_index - index] 有更好的选择吗?我也看到过这个和这个,但提供的解决方案没有一个像IMHO那样高效或
last_index = len(somelist) - 1
for (index,item) in enumerate(reversed(somelist)):
if somecondition(item):
del somelist[last_index - index]
有更好的选择吗?我也看到过这个和这个,但提供的解决方案没有一个像IMHO那样高效或简洁。你可以使用列表理解+切片赋值,这当然更简洁——我不知道效率(尽管我希望它在这方面也能做得更好,因为您不需要每次删除一个项目时都不断地移动列表中的元素…)
您希望简洁和高效的程度有多高?似乎两者都有。与意见相关的问题与堆栈溢出不太匹配。您确定您的代码确实有效吗?将
somelist
初始化为range(100)
和somecondition(项)
到项%2
,我最终得到了一个索引器。@mgilson我的第一个想法是,它应该是删除somelist[-index]
(使用枚举(…,start=1)
),否则,我能想到的所有方法都已经包含在前面的内容中了post@isedev我不确定效率,但你也可以做一些事情。删除(项目)与其倒过来数一数。@JonClements——可惜这是个骗局——我可能最终得到了一个很好的答案徽章:O)大约快了45%。谢谢
somelist[:] = [ x for x in somelist if not somecondition(x) ]