首页 >后端开发 >Python教程 >为什么从 Python 列表中迭代删除项目会产生意外结果?

为什么从 Python 列表中迭代删除项目会产生意外结果?

Patricia Arquette
Patricia Arquette原创
2024-12-23 06:01:13216浏览

Why Does Iteratively Removing Items from a Python List Produce Unexpected Results?

在 Python 中迭代删除项目时的奇怪行为

在 Python 中,在迭代期间从列表中删除项目时可能会出现奇怪的结果。考虑以下代码:

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

预期输出:[20, 21, ..., 49]

实际输出:[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]

原因:

问题源于在迭代列表时修改列表。在第一次循环迭代期间,1 被删除。但是,后续迭代不再指向缩短列表中的 2,而是指向 3。这样一直持续到只剩下大于 20 的元素。

解决方案:

  • 列表理解:
numbers = [n for n in numbers if n >= 20]
  • 就地更改:
numbers[:] = (n for n in numbers if n >= 20)
  • 先前使用生成器处理表达式:
for i, n in enumerate(numbers):
    if n < 20:
        print("do something")
        numbers[i] = None
numbers = [n for n in numbers if n is not None]

需要注意的是,通常不建议在迭代期间修改列表的长度。所提供的解决方案提供了实现预期结果的替代方法。

以上是为什么从 Python 列表中迭代删除项目会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn