Skip to main content
 首页 » 编程设计

python之从生成器函数中检索所有迭代器值

2025年05月04日9kerrycode

假设我有一个产生两个值的生成器函数:

def gen_func(): 
    for i in range(5): 
        yield i, i**2 

我想检索我的函数的所有迭代器值。目前我为此目的使用此代码片段:

x1, x2 = [], [] 
for a, b in gen_func(): 
    x1.append(a) 
    x2.append(b) 

这对我有用,但看起来有点笨拙。有没有更紧凑的编码方式?我在想类似的事情:

x1, x2 = map(list, zip(*(a, b for a, b in gen_func()))) 

然而,这只是给我一个语法错误。

PS:我知道我可能不应该为此目的使用生成器,但我在其他地方需要它。

编辑x1 和x2 的任何类型都可以,但是,我更喜欢列表。

请您参考如下方法:

如果x1 和x2 可以是元组,就足够了

>>> x1, x2 = zip(*gen_func()) 
>>> x1 
(0, 1, 2, 3, 4) 
>>> x2 
(0, 1, 4, 9, 16) 

否则,您可以使用 map 将 list 应用于迭代器:

x1, x2 = map(list, zip(*gen_func())) 

只是为了好玩,可以使用扩展的可迭代解包来完成同样的事情:

>>> (*x1,), (*x2,) = zip(*gen_func()) 
>>> x1 
[0, 1, 2, 3, 4] 
>>> x2 
[0, 1, 4, 9, 16]