我编写了一个代码来从列表
中分离int当我编写的代码无法正常工作时
list_a = [1,2,3,4,5,6,7,8,'Ahmed','Mustafa',100,103,107]
list_b = []
x = 0
for item in list_a:
if isinstance(item, int):
list_b.append(item)
list_a.pop(x)
x +=1
print (list_a)
print (list_b)
print (x)
那是我的输出
[2, 4, 6, 8, 'Ahmed', 'Mustafa', 103]
[1, 3, 5, 7, 100, 107]
8
并且代码以这种方式工作
list_a = [1,2,3,4,5,6,7,8,'Ahmed','Mustafa',100,103,107]
list_b = []
list_d = []
x = 0
for item in list_a:
if isinstance(item, int):
list_b.append(item)
else :
list_d.append(item)
x +=1
print (list_a)
print (list_b)
print (list_d)
print (x)
为什么发生故障?
答案 0 :(得分:1)
<强>逻辑上强>
列表pop
方法从索引中弹出并将其删除。索引0消失后,你必须弹出的下一个索引是...... 0!由于索引0中的元素消失了,因此应该删除的元素已移至新索引0。
每次在第一次迭代中弹出0,然后加1(这是原始列表中的第三个元素),递增x
。这就是你如何从迭代中丢失一些元素(你只是在它们被for
循环迭代之前删除它们)。
实际
真正的问题是pop
ping本身。当您遍历 iterable 时,您不应该修改它。如果要从原始列表中删除整数,请使用两个循环 - 一个用于将整数添加到第二个列表,第二个用于从第一个列表中删除它们。