Python在for循环中出现问题

2024-10-05 10:11:56 发布

您现在位置: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)

为什么会出故障?你知道吗


Tags: 代码in列表forif方式itempop
1条回答
网友
1楼 · 发布于 2024-10-05 10:11:56

逻辑上

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

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

实际上

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

相关问题 更多 >

    热门问题