带有for循环的Python故障

时间:2017-02-06 18:04:06

标签: python

我编写了一个代码来从列表

中分离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)

为什么发生故障?

1 个答案:

答案 0 :(得分:1)

<强>逻辑上

列表pop方法从索引中弹出并将其删除。索引0消失后,你必须弹出的下一个索引是...... 0!由于索引0中的元素消失了,因此应该删除的元素已移至新索引0。

每次在第一次迭代中弹出0,然后加1(这是原始列​​表中的第三个元素),递增x。这就是你如何从迭代中丢失一些元素(你只是在它们被for循环迭代之前删除它们)。

实际

真正的问题是pop ping本身。当您遍历 iterable 时,您不应该修改它。如果要从原始列表中删除整数,请使用两个循环 - 一个用于将整数添加到第二个列表,第二个用于从第一个列表中删除它们。