Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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 迭代列表的元素并执行';列表。删除(x)和#x27;,但是迭代之后列表不是空的_Python - Fatal编程技术网

Python 迭代列表的元素并执行';列表。删除(x)和#x27;,但是迭代之后列表不是空的

Python 迭代列表的元素并执行';列表。删除(x)和#x27;,但是迭代之后列表不是空的,python,Python,输出是[3,5,12,17,4321,13579],而不是预期的空列表,为什么会这样 实际上,我想写一个程序来删除列表中至少有一个偶数的整数,即 a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579] b = a for i in b: a.remove(i) print(a) 但这并不符合预期。我应该如何调试它?迭代列表而不是删除元素不是一件好事: 所以 顺便说一句,b与a相同,因为您应该: a = [2, 3, 4, 5

输出是[3,5,12,17,4321,13579],而不是预期的空列表,为什么会这样

实际上,我想写一个程序来删除列表中至少有一个偶数的整数,即

a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579]
b = a
for i in b:
    a.remove(i)
print(a)

但这并不符合预期。我应该如何调试它?

迭代列表而不是删除元素不是一件好事:

所以

顺便说一句,b与a相同,因为您应该:

a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579]
b = a
for i in b:
    a.remove(i)
print(a)
或:

要解决此问题,请执行以下操作:

b=a.copy()
或:

见:

以及:

还要回答以下问题:

a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579]
b = a[:]
while len(a):
    a.pop()
print(a)

问题是,每次删除元素时,都会使列表变短,但保持循环中的位置不变。实际上,在这样的循环中删除元素时,会跳过所有其他元素。考虑示例<代码> a= [1,2,3] 。在第一次迭代中,删除
1
。因此
a
变为
[2,3]
,您将位置移动到第二个元素,即现在的
3
,因此跳过了
2

如何修复它是通过使用列表进行过滤。下面是一个例子:

print([i for i in a any(i.__contains__(x) for x in range(0,10,2))])
在迭代过程中修改集合(尤其是修改长度的操作)是不允许的。在移除元素时,您将地毯从脚下拉出

如果你倒着做,它会起作用:

a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579]
filtered = [x for x in a if not any(digit in str(x) for digit in '02468')]
a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579]
b = a[:]
while len(a):
    a.pop()
print(a)
print([i for i in a any(i.__contains__(x) for x in range(0,10,2))])
a = [2, 3, 4, 5, 10, 12, 13, 17, 1234, 4321, 12345, 13579]
filtered = [x for x in a if not any(digit in str(x) for digit in '02468')]
   for i in reversed(b):
       a.remove(i)
   print(a)