运行以下python代码时:
shapes = [{"label": "bad_stuff"}, {"label": "cat"}, {"label": "cat"},{"label": "cat"}, {"label": "bad_stuff"}, {"label": "bad_stuff"}]
for elem in shapes:
if elem['label'] == "bad_stuff":
shapes.remove(elem)
......我得到的结果是:
[{'label': 'cat'}, {'label': 'cat'}, {'label': 'cat'}, {'label': 'bad_stuff'}]
为什么代码不删除列表中的最后一个元素?我该如何解决这个问题?
3条答案
按热度按时间v2g6jxz61#
因为你在for循环中修改了list,让我们看看你的代码中发生了什么:
在第一次迭代时,它删除shape [0] item。第2、3、4次迭代不满足条件,因此通过。在第五次迭代时,元素为
{"label": "bad_stuff"}
,您的shape如下所示:所以当你在这一步执行
remove(elem)
时,它会删除列表中的最后一项,因为你删除了最后一项-迭代停止。您的问题有解决方案:
DanielB在评论中提到的另一种解决方案:
z4iuyo4d2#
你可以用
filter
来实现yqlxgs2m3#
如果你想从列表中删除匹配的元素,请检查下面的代码