为什么不删除()实际删除Python列表中的最后一个重复项实例

时间:2015-10-18 07:28:40

标签: python list

我在Python中有这个代码,我试图从列表中删除数字1的所有实例。我也知道:

  1. 迭代它时,不可能改变列表。
  2. remove()删除第一次出现的项目,该项目在列表中包含多个实例。
  3. my_list = [2, 3, 1, 5, 8, 4, 6, 1, 1]
    print(my_list)
    
    for num in my_list:
        if num == 1:
            my_list.remove(num)
    
    print(my_list)
    

    输出:

    [2, 3, 1, 5, 8, 4, 6, 1, 1]
    [2, 3, 5, 8, 4, 6, 1]
    

    考虑到我提到的两点,列表如何变化?更重要的是,为什么最后1个没有从列表中删除?

2 个答案:

答案 0 :(得分:1)

正如评论者所说,实际上没有限制能够改变名单。看看这个输出,看看它是否有帮助。

>>> mylist = [1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> for num in mylist:
...   print(num)
...   if num == 1:
...     mylist.remove(num)
...
1
3
1
3
1
3
>>> print(mylist)
[2, 3, 2, 3, 2, 3]

你看到它如何跳过2s吗?它遍历从索引[0]到索引[-1]的列表。当你调用remove()时,它会一直跳到下一个索引点。您从未在示例中删除过1,因为for循环已遍历该索引点。

答案 1 :(得分:0)

1。 您实际上可以修改列表,同时迭代它:

<include>

这是一个很好的技巧,我之前在其中的一个答案中看到了(我不记得在哪里我会添加一个链接)。通过向后迭代列表,您可以删除键并仍然能够继续迭代低于您刚刚删除的索引!

  1. 根据文档,remove *应仅删除第一次出现。它正在做它应该做的事情!