gpt4 book ai didi

python:使用列表切片作为for循环的目标

转载 作者:太空狗 更新时间:2023-10-29 20:57:37 27 4
gpt4 key购买 nike

我发现这段代码非常有趣。

a = [0, 1, 2, 3]

for a[-1] in a:
print(a)

输出如下:

[0, 1, 2, 0]
[0, 1, 2, 1]
[0, 1, 2, 2]
[0, 1, 2, 2]

我试图理解为什么 python 会那样做。是因为 python 试图重新使用索引吗? For 循环以某种方式对列表进行切片?

我们可以在迭代列表时添加或删除元素,但是当我们尝试使用索引访问变量时,它会给出奇怪的输出。

谁能帮我理解for循环和列表中索引的交互?或者简单地解释一下这个输出?

最佳答案

它按预期工作。 (至少对于“预期”的某些解释。)

为此重写您的代码,以防止任何时候对 a[-1] 的任何误解:

a = [a for a in range(0,4)]
for b in a:
print (b)
a[-1] = b
print (a)

向我们展示

0
[0, 1, 2, 0]
1
[0, 1, 2, 1]
2
[0, 1, 2, 2]
2
[0, 1, 2, 2]

这清楚地表明 b 赋值a[-1] 是立即完成的,在迭代时更改列表。

四个循环执行以下操作:

  1. a[-1] 被设置为列表的第一个值,0。结果现在是 [0,1,2,0]
  2. a[-1] 被设置为第二个值,1。结果是(很明显)[0,1,2,1]
  3. a[-1] 设置为 2,因此结果为 [0,1,2,2] – 同样,只有 a[-1] 被改变了。
  4. 最后,a[-1] 被设置为 a 中的最后一个值,因此实际上它不会改变,最终结果是 [0, 1,2,2]

关于python:使用列表切片作为for循环的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51460895/

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