Python 迭代列表的元素并执行';列表。删除(x)和#x27;,但是迭代之后列表不是空的
输出是[3,5,12,17,4321,13579],而不是预期的空列表,为什么会这样 实际上,我想写一个程序来删除列表中至少有一个偶数的整数,即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
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)