代码之家  ›  专栏  ›  技术社区  ›  johnashu

for循环中的pop-by索引保持偶数索引

  •  1
  • johnashu  · 技术社区  · 7 年前

    如果之前已经问过这个问题,我很抱歉,但我找不到类似的问题。

    在python中,我需要弹出一些项目来耗尽列表。

    我写下面的文章是为了理解一些逻辑,我不明白发生了什么。

    我希望一个for循环迭代列表中的每个项,并相应地弹出每个项。

    但是,当我运行以下命令时,它只会弹出 odd 指标: [1, 3, 5, 7, 9] 以及 even 剩下的 [2, 4, 6, 8, 10]

    l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for code in l:    
        l.pop(l.index(code))
    print(l) # [2, 4, 6, 8, 10]
    

    我用一个 while 循环:

    l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    while l:
        for code in l:    
            l.pop(l.index(code))
    print(l) # []
    

    为什么 for 在这种情况下只循环弹出奇数索引?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Akshay Kumar    7 年前

    这个 for item in list 命令创建一个临时索引列表(也可能有步骤大小),该索引保持静态,在Python中的循环执行期间无法更改。因此, indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 永久居留。当您在每次迭代中弹出后对剩余的元素进行迭代时,尽管列表完全改变了,但是索引不会改变。

    你可以用 while 循环,因为它反复工作,直到整个列表被清空。下面显示的while循环的各个迭代后的值确认每个for循环只删除奇数元素。

    [2, 4, 6, 8, 10] [4, 8] [8] []

    当在 for 循环。