Python list.remove()不是';t删除所有实例
我面对的是一个非常奇怪的列表情况。在这种情况下,Python似乎非常有选择性地删除了哪些零: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个被删除。为什么?要解决评论中的家伙所描述的问题,您可以执
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]