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

标签 python python-3.x list for-loop indexing

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

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/

相关文章:

python - 我如何使用正则表达式判断一个字符串是否仅包含 python 中的数字和空格

python - 验证蛋白质序列

python - 带有 bool 语句的 Numpy 向量化函数赋值

python - 序号 242 无法定位到动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll

arrays - 如何从Flutter中的另一个类访问/调用数组(列表)数据?

c++ - 使用 STL 类的 typdef,如 map 、列表等

python - 列表理解表达式不显示任何值而不是子列表

Python 函数,它接受一个值列表并返回该列表在顶层包含的字符串数量

python - 如何使用自定义域强制将 HTTPS 流量发送到灵活的 Google App Engine?

python - 将多个 CSV 文件合并到...并具有最大大小限制