Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在迭代列表元素时删除列表元素_Python - Fatal编程技术网

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) ]