Python list.remove()不是';t删除所有实例

Python list.remove()不是';t删除所有实例,python,python-3.x,list,Python,Python 3.x,List,我面对的是一个非常奇怪的列表情况。在这种情况下,Python似乎非常有选择性地删除了哪些零: count = 0 a = ["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9] for x in a: if x == 0: a.remove(x) count += 1 print(a, count) 10个零中只有6个被删除。为什么?要解决评论中的家伙所描述的问题,您可以执

我面对的是一个非常奇怪的列表情况。在这种情况下,Python似乎非常有选择性地删除了哪些零:

count = 0
a = ["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9]

for x in a:
    if x == 0:
        a.remove(x)
        count += 1

print(a, count)

10个零中只有6个被删除。为什么?

要解决评论中的家伙所描述的问题,您可以执行以下操作:

count=0
a=[“a”,0,0,“b”,无,“c”,“d”,0,1,假,0,1,0,3,[],0,1,9,0,0,0,{},0,0,9]
对于a.copy()中的x:
如果x==0:
a、 删除(x)
计数+=1
打印(a、计数)
然后,您将遍历原始的
a
,同时在遇到它时将其减少
0

警告:

>False==0
符合事实的

更好的解决方案是只创建一个不包含0的新列表:

b = [x for x in a if x != 0]
count = len(a) - len(b)
输出

['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9]

请对所有python问题始终使用generic[python]标记。我需要创建一个重复列表,以便动态修改一个。正确,如果它“正在使用”-并且您仍然希望遍历它,同时更改它-那么是的-您需要复制it@mr_incredible:另一个选项是向后查看。但复制或重新创建它更快、更可读、更不容易出错。
['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9]