Python中for循环的边界规则及重复元素迭代问题咨询
Python for循环相关问题解答
问题1:Python中的for循环属于包含型还是排除型?
其实Python的for循环和不少语言里那种基于边界判断的for循环不太一样,它本质是遍历可迭代对象的每一个元素,从这个角度来说它是完全的包含型——只要是可迭代对象里存在的元素,都会被取出来执行循环体。
举个实际的例子:如果你写for i in [1,2,3],循环会依次处理1、2、3,没有任何“排除”的情况;哪怕是用range(1,4),看起来上限4没被包含,但那是range这个生成器自身的特性,不是for循环的规则——for循环只是把range生成的每一个元素(1、2、3)都包含进去执行了。
问题2:为什么for i in (1,1): print(i)会输出两个1?
这个问题的核心是得搞懂Python for循环的工作逻辑:它会逐个迭代可迭代对象中的每一个元素,完全不关心元素的值是否重复。
你写的(1,1)是一个包含两个元素的元组,这两个元素的值都是1,但它们是元组里两个独立的元素。for循环会先取出第一个1,执行print(i)输出1;接着再取出第二个1,再次执行print(i)输出第二个1。
如果想要程序只输出一次1,你可以先对可迭代对象去重,比如转换成集合(集合会自动剔除重复元素):
for i in set((1,1)): print(i)
这样就只会输出一次1了。
内容的提问来源于stack exchange,提问作者casillas




