Python在for循环中出现问题
我编写了一个代码,将int从列表中分离出来 当我以这种方式编写代码时,它不起作用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
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获取整数列表