複数の値を生成する 質問する

複数の値を生成する 質問する

Python ジェネレータ関数で複数の値を生成することはできないのでしょうか?

例、

def gen():
    for i in range(5):
        yield i, i+1
            
k1, k2 = gen()

Traceback (most recent call last)
----> 1 k1, k2 = a()

ValueError: too many values to unpack

これは次のように機能します。

>>> b = a()

>>> list(b)
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

次のようにしても同じ結果になります:

def a():
    for i in range(5):
        yield i
        yield i+1

ベストアンサー1

gen()ジェネレータ(単一のアイテムなので2つに展開できない)を返すため、拡張する必要がある。初め値を取得するには...

g = gen()
a, b = next(g)

listこれは、ジェネレータを暗黙的に消費するため機能します。

これをさらにジェネレーターにすることはできますか? こんな感じです:

g = gen();
def yield_g():
    yield g.next();
    k1,k2 = yield_g();

したがって、list(k1)を与え[0,1,2,3,4]list(k2)を与えるでしょう[1,2,3,4,5]

既存のジェネレーターをそのまま使用し、以下を使用しますizip(または zip 形式にします)。

from itertools import izip
k1, k2 = izip(*gen())

おすすめ記事