當使用一個函數返回一個元組的多個值時,我經常會發現自己使用以下習慣用法從列表理解中解壓縮結果。通過空輸入從列表理解開箱Python
fiz, buz = zip(*[f(x) for x in input])
大部分能正常工作的時間,但它拋出一個ValueError: need more than 0 values to unpack
如果input
是空的。這兩種方式我能想到的解決這個問題是
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'將是兩個單獨的事情,它們可以方便地或一起計算,但是一旦解包就會分開處理。 – Nyle