2014-09-30 269 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] 
相关问题