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

时间:2018-02-27 13:42:56

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

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

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

输出

1
a
2
b
test
test

3 个答案:

答案 0 :(得分:5)

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

通过执行for循环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',因为它在每次迭代中都会被覆盖。 / p>

希望现在有意义。

答案 1 :(得分:4)

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

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次迭代。

答案 2 :(得分:0)

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

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

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

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