Python中for循环迭代同名列表变量输出异常的原因解析
循环迭代列表后重复执行输出异常的原因
哈哈,这个坑我刚学Python的时候也踩过!先看看你遇到的场景:
people = ['mago','pipa','john','mat'] >>> for people in people: print(people) mago pipa john mat >>> for people in people: print(people) m a t >>> for people in people: print(people) t >>> for people in people: print(people) t
问题的核心就是你把循环的迭代变量和原列表用了同一个名字people,直接把原列表给覆盖了,一步步拆解给你看:
- 第一次循环启动时,
people是我们定义的列表['mago','pipa','john','mat']。循环过程中,每一次迭代都会把列表里的当前元素赋值给people变量——等循环跑完,people已经完全不是原来的列表了,它变成了列表的最后一个元素:字符串'mat'。 - 第二次循环再写
for people in people:时,这里的people已经是字符串'mat'了。而字符串在Python里是可迭代对象,会逐个返回它的字符,所以循环会依次输出m、a、t。循环结束后,people又被更新成了最后一个字符't'。 - 从第三次循环开始,
people已经是单字符字符串't'了,迭代它的时候只会返回't'这一个字符,所以每次循环都只输出t。哪怕你再跑N次,people始终是't',结果也就不会变了。
解决办法超级简单:把循环的迭代变量改成别的名字,比如person,这样就不会覆盖原列表了:
people = ['mago','pipa','john','mat'] for person in people: print(person) # 不管跑多少次,输出都是正常的列表元素
内容的提问来源于stack exchange,提问作者Tukson
相关产品推荐
相关产品推荐

