Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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在for循环中出现问题_Python - Fatal编程技术网

Python在for循环中出现问题

Python在for循环中出现问题,python,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

我编写了一个代码,将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)
为什么会发生这种故障?

逻辑上

list pop方法从索引中弹出并删除它。索引0消失后,必须弹出的下一个索引是。。。0! 由于索引0中的元素已消失,下一步应删除的元素已移动为新索引0

每次递增x在第一次迭代中弹出0,然后是原始列表中的第三个元素1。这就是为什么您在迭代过程中丢失了一些元素,您只需在for循环迭代之前删除它们

实际上


真正的问题是爆炸本身。在迭代一个iterable时,不应该修改它。如果要从原始列表中删除整数,请使用两个循环—一个用于将整数添加到第二个列表,另一个用于从第一个列表中删除整数。

您正在迭代列表。修改循环中的列表会干扰迭代。有人提到过这个问题的其中一个副本吗?我今天找不到正确的搜索键:-迭代时不能弹出项目,它会更改迭代器的大小。如果要删除项,则必须创建一个副本。可能的副本可以简单地将pop索引存储到列表中,并在使用该索引列表获取int list pop元素之后。使用listfilterlambda i:isinstancei,int,list_a获取整数列表