我试图从列表中删除元素,如果元素是偶数,代码部分运行,但没有从中删除12。我一直被困在这一点上,有人知道问题是什么吗?有什么可以优化的解决方案吗?
lst=[0,3,5,8,12,2] #created a list
for i in lst:
if(i%2==0):
lst.remove(i) #removes elements from the list
print(lst)
O/P:[3, 5, 12]
在循环列表时修改列表是一个常见的陷阱。
正确而安全的方法是用列表理解或过滤器来重新创建列表。
-
列表理解版本:
lst = [x for x in lst if x%2!=0]
-
过滤器版本:
lst = list(filter(lambda x: x%2!=0, lst))
两个代码段都会导致:
lst = [3, 5]
简单使用python强大的列表理解:
filtered_list =[i for i in old_list if i % 2 != 0]