首页 > 后端开发 > Python教程 > 为什么在迭代期间修改 Python 列表会导致意外结果?

为什么在迭代期间修改 Python 列表会导致意外结果?

Barbara Streisand
发布: 2024-12-27 18:36:11
原创
943 人浏览过

Why Does Modifying a Python List During Iteration Lead to Unexpected Results?

Python 中的迭代列表更改:了解后果

在 Python 中,在迭代列表时修改列表可能会导致意外结果。考虑以下代码:

numbers = list(range(1, 50))

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

print(numbers)
登录后复制

此代码不是按预期删除 20 以下的数字,而是打印一个列表,其中缺少 20 以下的所有数字以及 20 本身。

问题: 迭代器位置偏移

问题源于这样一个事实:从列表中删除一个项目会改变后续项目的位置。随着循环的进行,正在检查的项目不再是预期的项目,因为删除的元素在列表中创建了“洞”。

例如,在初始迭代期间,1 被删除,但下一次迭代不检查2;相反,它会检查 3,因为列表已被缩短。这种行为持续下去,会导致不正确的输出。

正确的列表更改技术

要避免此问题,请在迭代期间使用替代方法更改列表,例如:

  • 列表理解:
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:
        numbers[i] = None
numbers = [n for n in numbers if n is not None]
登录后复制

这些技术在迭代时不会修改列表的长度,确保正确的项目处理和所需的输出。

以上是为什么在迭代期间修改 Python 列表会导致意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板