Python 在具有索引特定项的列表中循环

Python 在具有索引特定项的列表中循环,python,python-3.x,list,loops,Python,Python 3.x,List,Loops,当我最近在查看一些问题和答案时,我发现了一个问题: x = [0, 1, 2, 3] for x[-1] in x: print(x[-1]) 结果是: 0 1 2 2 我对答案描述不满意,答案描述说: x[-1]的值在每次迭代中都会发生变化 当你写作时: for a in x: 在每次迭代中,您都将x中的元素分配给a。因此a从0变为3 现在,当您这样做时: for x[-1] in x: 您所做的是为x的最后一个元素指定x中的值。这应该澄清: >>> x =

当我最近在查看一些问题和答案时,我发现了一个问题:

x = [0, 1, 2, 3]
for x[-1] in x:
    print(x[-1])
结果是:

0
1
2
2
我对答案描述不满意,答案描述说:

x[-1]的值在每次迭代中都会发生变化

当你写作时:

for a in x:
在每次迭代中,您都将x中的元素分配给a。因此
a
0
变为
3

现在,当您这样做时:

for x[-1] in x:
您所做的是为
x
的最后一个元素指定
x
中的值。这应该澄清:

>>> x = [0, 1, 2, 3]
>>> for x[-1] in x:
...     print(x,x[-1])

#output
[0, 1, 2, 0] 0     # a = 0, make x[-1] = a, x becomes [0, 1, 2, 0], print x[-1] = 0
[0, 1, 2, 1] 1     # a = 1, make x[-1] = a, x becomes [0, 1, 2, 1], print x[-1] = 1
[0, 1, 2, 2] 2     # a = 2, make x[-1] = a, x becomes [0, 1, 2, 2], print x[-1] = 2
[0, 1, 2, 2] 2     # a = 2, make x[-1] = a, x becomes [0, 1, 2, 2], print x[-1] = 2

说明: 在第一次迭代中,
a=0
分配给x[-1],因此
x
变为
[0,1,2,0]
,然后打印
x[-1]
,结果是
0

然后在第二次迭代中,分配给
x[-1]
a=1
因此
x
变为
[0,1,2,1]
,然后打印
x[-1]
,结果是
1


等等……这是个好问题。为了弄清楚发生了什么,我将代码扩展为:

x = [0, 1, 2, 3]
for x[-1] in x:
    print(f"the array x is {x}")
    print(f"the value of is x[-1] is {x[-1]}")
    print("***") # just a separator between iterations
结果是

the array x is [0, 1, 2, 0]
the value of is x[-1] is 0
***
the array x is [0, 1, 2, 1]
the value of is x[-1] is 1
***
the array x is [0, 1, 2, 2]
the value of is x[-1] is 2
***
the array x is [0, 1, 2, 2]
the value of is x[-1] is 2
***

如您所见,python使用数组的最后一个单元格-
x[-1]
作为变量,保存它迭代的值。这就是为什么,当我们到达最后一次迭代时,它会保存上一次迭代的值“2”,以及它打印的内容

这个解释注定是清楚的

x[-1]
指向
x
的最后一个元素

对于x中的x[-1]:
只是说:迭代
x
中的元素,并将当前值保存到
x[-1]

下面是每次迭代的顺序:

(循环开始之前)
x=[0,1,2,3]

  • x[-1]=0#x==0,1,2,0]
  • x[-1]=1#x==0,1,2,1]
  • x[-1]=2#x==0,1,2,2]
  • x[-1]=2#x==0,1,2,2]

  • 为什么这个问题是拉丁语?我希望我能找到复本。。。在每次迭代中,
    x[-1]
    被重新分配了
    next()
    。我不明白你在说什么。我已经用英语写了这个问题。@dipesh我们看到的是:Molestias vero quae应得的劳动。将编辑问题。非常感谢。