gpt4 book ai didi

python - 迭代列表的不同方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:04 25 4
gpt4 key购买 nike

谁能告诉我这段代码有什么区别:

x = [1, 2, 3, 4, 5, 6, 7]
for i in x[:]:
if i == 5:
x.insert(0, i)

还有这段代码:

x = [1, 2, 3, 4, 5, 6, 7]
for i in x:
if i == 5:
x.insert(0, i)

为什么第二个不起作用?我知道 Python 教程中提到了它,但我不太明白。

最佳答案

在第一个版本中,您创建一个副本(通过从头到尾对列表进行切片),在第二个版本中,您迭代原始列表。

如果您迭代一个容器,它的大小在迭代期间不能改变,这是有充分理由的(见下文)。但是由于您调用了 x.insert,列表的大小发生了变化。


如果你执行第二个版本,它实际上不会立即抛出错误,而是无限期地继续,用越来越多的 5 填满列表:

一旦您位于列表索引 4(因此 i 为 5),您将在列表的开头插入一个 5:

[5, 1, 2, 3, 4, 5, 6, 7]

然后您继续循环,隐式地将您的索引增加到 5,现在又是 5,因为由于您的插入,整个列表向右移动了一位,因此将再次插入 5:

[5, 5, 1, 2, 3, 4, 5, 6, 7]

这将“永远”进行下去(直到出现 MemoryError)。

关于python - 迭代列表的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35206863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com