簡體   English   中英

從生成器函數檢索所有迭代器值

[英]Retrieving all iterator values from generator function

假設我有一個生成器函數,它產生兩個值:

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:我知道我可能不應該為此目的使用生成器,但是我需要在其他地方使用它。

編輯: x1x2任何類型都可以,但是,我更喜歡列出我的情況。

如果x1x2可以是元組,則足以

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

否則,您可以使用maplist應用於迭代器:

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

只是為了好玩,使用擴展的可迭代拆包可以完成同一件事:

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

您幾乎擁有它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM