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

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

Susan Sarandon
Susan Sarandon原创
2024-12-23 19:53:17795浏览

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中文网其他相关文章!

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