您在谈论列表 推导 ,而不是生成器表达式。
您需要交换for循环:
[ x for y in range(3) for x in range(y) ]
您需要阅读它们,就像它们嵌套在常规循环中一样:
for y in range(3): for x in range(y): x
具有多个循环的列表推导遵循相同的顺序。请参阅清单理解文档:
提供列表理解时,它由单个表达式组成,后接至少一个
for子句和零个或多个fororif子句。在这种情况下,新列表的元素是通过将每个fororif子句视为一个块,从左到右嵌套,并在每次到达最里面的块时评估表达式以产生一个列表元素而生成的元素。
当然,生成器表达式也是一样,但是它们使用
()括号而不是方括号,并且不会立即实现:
>>> (x for y in range(3) for x in range(y))<generator object <genexpr> at 0x100b50410>>>> [x for y in range(3) for x in range(y)][0, 0, 1]



