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

标签 python list

<分区>

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

  1. 在遍历列表时不可能改变它。
  2. remove() 删除列表中第一次出现的具有多个实例的项目。
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]

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

最佳答案

正如评论者所说,对于能够改变列表实际上没有任何限制。查看此输出,看看是否有帮助。

>>> 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]

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

关于python - 为什么 remove() 实际上不删除 Python 列表中重复项的最后一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33195403/

相关文章:

python - 我应该把 portaudio 放在哪里以便 Pyaudio 可以找到它

python - Plotly:如何使用文本模板的空间来自动化 y 轴?

python - 使用 "contextlib.nested"的 Python 代码在 Python 3 中应该是什么样子?

python - 生成 52 个随机字母的间隔流,其中每个字母出现两次

Excel VBA 数据验证 - 下拉 : Options too many to be saved, 导致错误 "Excel found unreadable content"

c# - 继承:在c#中的继承类对象列表中查找最大数量和最常用的字符串

python - 寻找只能保存特定值的数据类型

python - 在python中选择一个随机列表元素

python - 如何使用二维 bool 数组在 numpy 中逐行从一维数组中进行选择?

c++ - 我应该使用哪种 STL 来完成这项任务?