a = [0,1,2,3]
for a[-1] in a:
print a[-1]
守则的输出是 0 1 2 2
怎么样?
答案 0 :(得分:1)
在每次循环迭代中,下一个列表元素被分配给循环目标。这里的循环目标是a[-1]
。所以循环有效地做到了:
a[-1] = a[0] # 0
print(a[-1])
a[-1] = a[1] # 1
print(a[-1])
a[-1] = a[2] # 2
print(a[-1])
请注意,此处的最后一个将a[-1]
设置为2.这意味着a现在为[0, 1, 2, 2]
。最后一个循环迭代现在读取最后一个值(a[3]
)并打印它,给出你看到的输出。
当循环目标不依赖于它的迭代时,就会出现这种奇怪现象。
答案 1 :(得分:1)
您可以将for-loop视为等效于以下内容:
next
所以你看,a[-1]
时a = [*0*, 1, 2, 0]
返回的当前值被分配给print a[-1]
,这是列表的最后一个元素。
所以,
迭代1:0
,a = [0, *1*, 2, 1]
打印print a[-1]
迭代2:1
,a = [0, 1, *2*, 2]
打印print a[-1]
迭代3:2
,a = [0, 1, 2, *2*]
打印print a[-1]
迭代4:2
,next
打印Jlabel label = new JLabel("test text");
frm.add(jlab);
我已经* frm.add(label);
返回了什么。
答案 2 :(得分:1)
你可以
复制/粘贴您的一小段代码HERE ( pythontutor.com )
逐步了解自己会发生什么。
有时候可视化的价值超过千言万语......而且,正如所有其他答案所解释的那样,当这个循环同时运行时会发生两件事情:
提供列表中的值,并使用新值更新列表本身。这就产生了惊人的输出。
答案 3 :(得分:1)
首先,a [-1]是列表a的最后一个元素。 因此,每次迭代器从列表中获取一个元素并将其分配给。
的最后一个元素a[-1]=0 #when first loop runs
a[-1]=1 #when loop runs second time
a[-1]=2 #when loop runs third time
所以,现在你的列表是[0,1,2,2],因为当循环运行第3次时,它分配了列表的最后一个元素,值为2.
现在,当循环运行第4次和最后一次它占用最后一个元素时,将其分配给[-1],它本身是最后一个元素并打印它。因此,有效地,它打印2,这是我们列表中的最后一个元素,经过3次迭代。
这是因为您在迭代期间迭代并修改同一个对象。