列表如何在 python 中使用 for 循环实际工作?
Posted
技术标签:
【中文标题】列表如何在 python 中使用 for 循环实际工作?【英文标题】:how list actually works in python using for-loop? 【发布时间】:2018-08-07 04:27:46 【问题描述】:我试过这段代码,我不明白它是如何工作的
a=[1,'a',2,'b','test','exam']
for a[-1] in a:
print(a[-1])
输出
1
a
2
b
test
test
【问题讨论】:
它是如何像这样遍历列表的? @L_Church 循环使用a
的最后一个元素来存储循环变量。如果你问我,这很奇怪。所以exam
自第一次迭代以来就永远丢失了。
你能简单解释一下吗? @Jean-FrançoisFabre 举个例子??
最奇怪的是“a”作为结果会得到内容:[1, 'a', 2, 'b', 'test', 'test'],即使它从来没有明确更改或附加任何值。
@NandishPatel 似乎您发现了一些让我们感到难过的东西。这就是为什么这有点被赞成
【参考方案1】:
崩溃。 for a[-1] in a 集合 a[-1] = a[1] 因为 for 循环。在随后的迭代中,它再次执行此操作,因此列表循环的内容。当它进行第 6 次迭代时,您可能期望打印是“考试”。但是,请记住第一次迭代中发生的事情。 a[-1] = a[1]。考试字符串不再存在,因为它被整数 1 破坏了。当时,a[1] 和 a[-1] 都是整数 1。
在 for 循环完成后,您将退出其范围。在主程序的范围内,列表 a 的内容从未改变。所以你最后的打印与循环中发生的事情无关。
for 循环接受所有与常规赋值相同的赋值目标,无论多么愚蠢。所以它重复分配到列表的最后一个位置。
你真的不应该在 for ... in 之间使用任何索引。你应该只写一个变量名,不要写任何现有变量的名称。没有人会在实际项目中编写这样的代码,因为不应该这样使用 for 循环。
【讨论】:
我无意中发现了它。【参考方案2】:让我们稍微改变一下循环:
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 次迭代。
【讨论】:
【参考方案3】:在 python 中,您可以使用索引-1
隐式访问列表的最后一个元素。所以a[-1]
将返回列表a
的最后一个元素的值。
通过执行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'
,因为它在每次迭代中都会被覆盖。
希望现在有意义。
【讨论】:
谢谢你的代码含义相同,但他的回答很容易理解。以上是关于列表如何在 python 中使用 for 循环实际工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 的 for 循环中删除列表元素? [复制]