列表如何在 python 中使用 for 循环实际工作?

Posted

技术标签:

【中文标题】列表如何在 python 中使用 for 循环实际工作?【英文标题】:how list actually works in python using for-loop? 【发布时间】:2018-08-07 04:27:46 【问题描述】:

我试过这段代码,我不明白它是如何工作的

a=[1,'a',2,'b','test','exam']
for a[-1] in a:
    print(a[-1])

输出

1
a
2
b
test
test

【问题讨论】:

它是如何像这样遍历列表的? @L_Church 循环使用a 的最后一个元素来存储循环变量。如果你问我,这很奇怪。所以exam 自第一次迭代以来就永远丢失了。 你能简单解释一下吗? @Jean-FrançoisFabre 举个例子?? 最奇怪的是“a”作为结果会得到内容:[1, 'a', 2, 'b', 'test', 'test'],即使它从来没有明确更改或附加任何值。 @NandishPatel 似乎您发现了一些让我们感到难过的东西。这就是为什么这有点被赞成 【参考方案1】:

崩溃。 for a[-1] in a 集合 a[-1] = a[1] 因为 for 循环。在随后的迭代中,它再次执行此操作,因此列表循环的内容。当它进行第 6 次迭代时,您可能期望打印是“考试”。但是,请记住第一次迭代中发生的事情。 a[-1] = a[1]。考试字符串不再存在,因为它被整数 1 破坏了。当时,a[1] 和 a[-1] 都是整数 1。

在 for 循环完成后,您将退出其范围。在主程序的范围内,列表 a 的内容从未改变。所以你最后的打印与循环中发生的事情无关。

for 循环接受所有与常规赋值相同的赋值目标,无论多么愚蠢。所以它重复分配到列表的最后一个位置。

你真的不应该在 for ... in 之间使用任何索引。你应该只写一个变量名,不要写任何现有变量的名称。没有人会在实际项目中编写这样的代码,因为不应该这样使用 for 循环。

【讨论】:

我无意中发现了它。【参考方案2】:

让我们稍微改变一下循环:

a=[1,'a',2,'b','test','exam']
for temp in a:
    a[-1] = temp
    print(a[-1])

这个循环也是如此。

所有迭代:

temp = a[0]     => a[-1] is 1       and a is [1,'a',2,'b','test',1]
temp = a[1]     => a[-1] is 'a'     and a is [1,'a',2,'b','test','a']
temp = a[2]     => a[-1] is 2       and a is [1,'a',2,'b','test',2]
temp = a[3]     => a[-1] is 'b'     and a is [1,'a',2,'b','test','b']
temp = a[4]     => a[-1] is 'test'  and a is [1,'a',2,'b','test','test'] 
temp = a[5]     => a[-1] is 'test'  and a is [1,'a',2,'b','test','test']

关注最后 2 次迭代。

【讨论】:

【参考方案3】:

在 python 中,您可以使用索引-1 隐式访问列表的最后一个元素。所以a[-1] 将返回列表a 的最后一个元素的值。

通过执行for a[-1] in a 循环,您可以遍历列表,并将a 的下一个元素的值存储在其最后一个元素中。

所以为了更好地理解发生了什么,你应该在每次迭代时打印整个列表,这样你就可以可视化操作:

a=[1, 'a', 2, 'b', 'test', 'exam']
for a[-1] in a:
    print(a)

你会得到:

[1, 'a', 2, 'b', 'test', 1]
[1, 'a', 2, 'b', 'test', 'a']
[1, 'a', 2, 'b', 'test', 2]
[1, 'a', 2, 'b', 'test', 'b']
[1, 'a', 2, 'b', 'test', 'test']
[1, 'a', 2, 'b', 'test', 'test']

您可以看到,在每次迭代中,最后一个元素将保存即将到来的元素的值,实际上您将丢失最后一个元素的原始内容,即'exam',因为它在每次迭代中都会被覆盖。

希望现在有意义。

【讨论】:

谢谢你的代码含义相同,但他的回答很容易理解。

以上是关于列表如何在 python 中使用 for 循环实际工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在go中使用带有for循环的列表

如何在 Python 的 for 循环中删除列表元素? [复制]

如何在列表理解python中构建两个for循环

python中 for循环的坑

如何在 Python 中创建多个 for 循环列表的递归以获得组合? [复制]

Python:如何使用 for 循环合并两个列表,如 zip