python for循环嵌套时,内层循环不执行的问题

https://stackoverflow.com/questions/11569535/python-nested-loop-with-generators-does-not-work-in-some-cases
这个文章解释的很清楚

当把生成器放在所有循环的外层时

a = (x for x in range(3))
b = (x for x in range(2))
for i in a: 
    for j in b:`
        print (i,j)

得到的结果

(0, 0)
(0, 1)

但是如果把生成器放在循环当中

for i in (x for x in range(3)):
    for j in (x for x in range(2)):
        print (i,j)

结果就是正常的

(0, 0)
(0, 1)
(1, 0)
(1, 1)
(2, 0)
(2, 1)

这是因为当a,b生成器在放在循环外层的时候,b生成器在外部循环第一次运行的时候,就已经用尽了,随后的迭代中,内部循环使用的都是空的b,就像

for i in ()

所以内部循环实际上只会在外部循环第一次运行的时候被循环一次,后面看起来就像没有被执行一样,实际是因为此时b为空了,所以要想循环正常运行,需要在内层循环运行的每次,都创建b生成器,就像第二个例子当中的那样。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容