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

为什么在迭代期间修改列表会产生意外结果?

Susan Sarandon
发布: 2024-12-23 19:53:17
原创
794 人浏览过

Why Does Modifying a List During Iteration Produce Unexpected Results?

在迭代期间修改列表时出现意外结果

在迭代列表时修改列表时,可能会出现意外结果。考虑以下代码:

numbers = list(range(1, 50))

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

print(numbers)
登录后复制

尽管打算从列表中删除小于 20 的数字,但结果输出包含其中一些数字。出现这种差异的原因是列表在迭代过程中发生了更改。

具体来说,在删除第一个低于 20 (1) 的数字后,循环继续到原始列表中的下一项,现在是 3 而不是 2此过程继续进行,从而删除所有低于 20 的奇数。

为了避免此问题,建议使用替代方法,例如 list推导式或生成器表达式。下面是使用列表理解的示例:

numbers = [n for n in numbers if n >= 20]
登录后复制

此代码保留列表的原始顺序,同时过滤掉不需要的元素。或者,您可以使用生成器表达式进行就地更改:

numbers[:] = (n for n in numbers if n >= 20)
登录后复制

如果需要在删除某个元素之前对其执行操作,请考虑使用索引循环并将该元素设置为 None。然后,创建一个仅包含非 None 元素的新列表:

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]
登录后复制

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

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