我有一個函數返回兩個值,我想用列表理解來填充兩個列表。 例如:python列表理解多個返回函數
def f(x):
return 2*x,x*x
x = range(3)
xlist, ylist = [f(value) for value in x]
EDITS from answers below:
xtuple, ytuple = zip(*[f(value) for value in x])
xlist, ylist = map(list,zip(*[f(value) for value in x]))
,其中預期收益應該是:
xlist = [0, 2, 4]
ylist = [0, 1, 4]
我的問題歸結爲:
目前我得到的元組的列表,而這是合理的,我將結束需要兩個獨立的列表。目前我可以有1個佔位符(元組列表)變量,以及3個全面的理解。但是我想知道是否有一種簡單的方法來做到單列表理解。值得注意的是:在真實代碼中,我的兩個返回值是相關的,所以我不能簡單地將函數分成兩部分。
列表理解不應該使用製作兩個名單。當然,你可以使用'zip'來將你的元組列表轉換爲兩個列表,但是爲什麼試圖在這裏提供一個列表理解?只需遍歷你的元組並追加到兩個列表中...保持簡單。 –
@ juanpa.arrivillaga:我不知道我是否同意這一觀點:首先,列表理解的工作速度比追加速度快(在一個列表中,實際上當提供兩個列表時效率會更低)。此外,聲明式風格並沒有使用那些帶有副作用的操作:列表理解通常沒有副作用:人們通常會編寫便於*讀者*而非*作者*的代碼。此外,爲什麼這個問題被低估? –
@WillemVanOnsem我沒有倒下它,爲了記錄。但是,使用理解,*然後*壓縮它,可能*不會更快,除非您使用生成器理解,因此您只需一次完成,而不是首先將元組列表構建到內存中。但是,然後,在一個函數中包裝一個for循環可能會給你提供比使用生成器更好或更好的性能(這會降低性能)。此外,這是一個風格和可讀性的問題,但我認爲這是主觀的。 –