gpt4 book ai didi

python - 使用切片来迭代列表

转载 作者:行者123 更新时间:2023-12-01 07:14:03 24 4
gpt4 key购买 nike

当我使用切片来迭代列表时,我得到了正确的输出。

代码:

words = ['cat', 'window', 'defenestrate']
for w in words[:]:
if len(w) > 6:
words.insert(0, w)

print(words)

输出:

['defenestrate', 'cat', 'window', 'defenestrate']

但是当我不使用切片进行迭代时,输出会进入无限循环。

代码:

words = ['cat', 'window', 'defenestrate']
for w in words:
if len(w) > 6:
words.insert(0, w)

print(w)

谁能解释一下为什么会出现这样的问题?

最佳答案

这是因为切片会创建一个新对象。

这些代码的工作原理如下:

第一个:

words = ['cat', 'window', 'defenestrate']
for w in words[:]:
if len(w) > 6:
words.insert(0, w)

print(words)

首先words = ['cat', 'window', 'defenestrate'],当你for w in Words[:]时,就像在做:

temp = words.copy()
for w in temp:
...

要了解第二个代码的作用,您可以运行以下代码:

words = ['cat', 'window', 'defenestrate'] 
for w in words:
print(words, w)
if len(w) > 6:
words.insert(0, w)
i += 1
if i == 15: break

这将为您提供以下输出:

['cat', 'window', 'defenestrate'] cat
['cat', 'window', 'defenestrate'] window
['cat', 'window', 'defenestrate'] defenestrate
['defenestrate', 'cat', 'window', 'defenestrate'] defenestrate
['defenestrate', 'defenestrate', 'cat', 'window', 'defenestrate'] defenestrate
['defenestrate', 'defenestrate', 'defenestrate', 'cat', 'window', 'defenestrate'] defenestrate
.
.
.

在第三次迭代之后,for 循环发现它已经迭代直到words 数组的第三个元素,然后它转到第四个元素。这又是defenestrate,所以它读取它并将其添加到数组的开头,这样数组的长度就变成了5,并且同样的事情会一遍又一遍地发生。

关于python - 使用切片来迭代列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58066930/

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