我在Python中有这个代码,我试图从列表中删除数字1的所有实例。我也知道:
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个没有从列表中删除?
答案 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>
这是一个很好的技巧,我之前在其中的一个答案中看到了(我不记得在哪里我会添加一个链接)。通过向后迭代列表,您可以删除键并仍然能够继续迭代低于您刚刚删除的索引!
remove
*应仅删除第一次出现。它正在做它应该做的事情!