繁体   English   中英

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

[英]how list actually works in python using for-loop?

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

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

输出

1
a
2
b
test
test

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

通过for a[-1] in a执行 for 循环,您可以遍历列表,并将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' ,因为它在每次迭代中都会被覆盖。

希望它现在有意义。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM