2014-09-30 260 views
0

我有一個元組列表元組,我需要更多的信息添加到每個元組。該列表看起來是這樣的:Python中創建一個使用函數返回多個值

[(name1, value1), (name2, value2), (name1, value3), ...] 

我有一個函數來獲取每個元組的額外信息,但我需要新的元組是平的,我想不出一個好辦法做到這一點的列表理解。我希望能夠做這樣的事情:

new_list = [(name, value, *extra_info(name)) for name, value in old_list] 

new_list = [list(name, value, *extra_info(name)) for name, value in old_list] 

不幸的是,第一個是語法錯誤,而第二個不工作,因爲list只需要在一個參數。有沒有辦法將extra_info返回的元組解壓縮到列表理解中?如果沒有,那麼解決這個問題的最好的方法是什麼?

要清楚,我想用一個看起來像這樣的列表來結束:

[(name1, value1, extra1, extra2), (name2, value2, extra3, extra4), (name1, value3, extra1, extra2), ...] 
+0

'(name,value)+ extra_info(name)'?假設'extra_info'返回一個元組? – 2014-09-30 22:27:15

+0

@ g.d.d.c是的,'extra_info'返回多個值,所以它們被打包到一個元組中。 – 2014-09-30 22:34:58

回答

2

您來總結列表並將其轉換爲一個元組。

new_list = [(name, value) + extra_info(name) for name, value in old_list] 
+0

將多個值作爲元組返回,並且名稱和值已經在元組中,因此我可以只添加元組。這對我來說是完美的! – 2014-09-30 22:33:50

+2

有趣的編輯:-) – 2014-10-01 06:48:26

2

嘗試:

new_list = [(name, value) + extra_info(name) for name, value in old_list] 

不需要元組轉換成列表...

0

東西,我想出了一邊想着這是使用lambda echo功能包新元組:

packer = lambda *x: x 
new_list = [packer(name, value, *extra_info(name)) for name, value in old_list] 
相關問題