Python 这个for循环是如何工作的?

Python 这个for循环是如何工作的?,python,Python,请让我知道这个for循环是如何工作的 b= [4,5,6] for b[-1] in b: print(b[-1]) 此代码段的输出为:- 4 5 5 我用Python2.7检查了它,每次迭代都会选择b的元素I。它属于b[-1](b的最后一个元素)并已打印。因此,每一步,b的最后一个元素(循环之前的6个元素)被赋予第i个元素的值 最后,在最后一次迭代中,读取第i个值,读取的值是迭代之前写入的值(即5) 在每个步骤中修改代码以打印b,这一点变得显而易见: b = [4,5,6] for

请让我知道这个for循环是如何工作的

b= [4,5,6]
for b[-1] in b:
   print(b[-1])
此代码段的输出为:-

4
5
5

我用Python2.7检查了它,每次迭代都会选择b的元素I。它属于b[-1](b的最后一个元素)并已打印。因此,每一步,b的最后一个元素(循环之前的6个元素)被赋予第i个元素的值

最后,在最后一次迭代中,读取第i个值,读取的值是迭代之前写入的值(即5)

在每个步骤中修改代码以打印b,这一点变得显而易见:

b = [4,5,6]
for b[-1] in b:
    print(b[-1])
    print(b)

(现实生活中不要做这种事情。)

你可以在打印整个
b
列表时理解它:

b= [4,5,6]
for b[-1] in b:
    print(b)
    print(b[-1])
输出

[4, 5, 4]  # first iteration, you set last element(6) with first element(4) [4,5,6] -> [4,5,4]
4
[4, 5, 5]  # second iteration, you set last element(4) with element(5), [4,5,4] -> [4,5,5]
5
[4, 5, 5]  # last iteration, you set last element(5) with element(5), no change
5

因此,基本上,您最后一个元素的每次迭代都会成为您迭代使用的元素。

那么为什么
5
会在最后一次迭代中打印出来,而不是6次呢?您可以在pythontutor.com上运行您的代码,以获得非常好的可视化效果。您在哪里找到这段代码的?在for循环头中使用像
b[-1]
这样的复杂表达式并不是典型的生产质量风格,所以我猜这原本是一个“猜测此代码的行为”的谜语。也许与我们分享它的来源会提供更多有用的上下文。是的,这是一个谜题