Python 如何组合发电机?

Python 如何组合发电机?,python,itertools,Python,Itertools,我想组合一个生成器,这样当我调用这个生成器的列表时,我会得到一个所有生成器元素的列表,而不是一个生成器列表。例如,我目前正在做: list(itertools.chain((i for i in range(j)) for j in range(3))) 它正在返回: [<generator object <genexpr>.<genexpr> at 0x7fc48921e200>, <generator object <genexpr>.

我想组合一个生成器,这样当我调用这个生成器的列表时,我会得到一个所有生成器元素的列表,而不是一个生成器列表。例如,我目前正在做:

list(itertools.chain((i for i in range(j)) for j in range(3)))
它正在返回:

[<generator object <genexpr>.<genexpr> at 0x7fc48921e200>,
<generator object <genexpr>.<genexpr> at 0x7fc48921eeb8>,
<generator object <genexpr>.<genexpr> at 0x7fc48921e7d8>]
你可以这样做

list(itertools.chain.from_iterable((i for i in range(j+1)) for j in range(3)))
# [0, 0, 1, 0, 1, 2]
rangej不会提供您想要的输出。您必须使用rangej+1

您可以这样做,而无需使用迭代器

In [58]: list(i for j in range(3) for i in range(j+1))
Out[58]: [0, 0, 1, 0, 1, 2]

你很接近:为什么要使用发电机呢?为什么不只是[i代表range3中的j代表rangej中的i]?虽然,听起来您希望[i代表range4中的j代表rangej中的i]继续您的预期输出…列表->[]
In [58]: list(i for j in range(3) for i in range(j+1))
Out[58]: [0, 0, 1, 0, 1, 2]