タプルで複数の値を返す関数を扱うとき、私はしばしば次のイディオムを使ってリストの解読の中から結果を解くことができます。Pythonがリストの解読を空の入力で解く
fiz, buz = zip(*[f(x) for x in input])
時間のほとんどは、これは正常に動作しますが、input
が空の場合、それはValueError: need more than 0 values to unpack
をスローします。私はこの問題を回避するためと考えることができる2つの方法が
fiz = []
buz = []
for x in input:
a, b = f(x)
fiz.append(a)
buz.append(b)
と
if input:
fiz, buz = zip(*[f(x) for x in input])
else:
fiz, buz = [], []
ですが、入力された場合、特にPython的フォーマこれらの感触のどちらが過度に冗長であり、後者は動作しません。リストではなくジェネレータ(if/elseを必要とするのに加えて、私が実際に必要とされるべきではないと感じる場所)。
これを行う簡単な方法はありますか?私は最近Python 2.7で作業していましたが、Python 3のソリューションが異なる場合には、それを知ることにも興味があります。
私は 'namedtuple'sに精通していますが、ここでどのように役立つのか分かりません。通常、私がこのようなことをしているとき、 'fiz'と' buz'は一緒に計算するのに便利で必要な2つの別個のものですが、解凍されたら別々に扱われます。 – Nyle