2013-05-01 60 views
0

2列出都是这样的,Python列表位置上的元组

a=[(id,  name, value_1, value_2),(id, name, value_3, value_4)..] 
b=[(id_key, name, value_5, value_6),(id_key,name, value_7, value_8)..] 

我想合并像这样,

c=[(id,'', name, value_1, value_2), 
    (id,'', name, value_3, value_4), 
    .. 
    .. 
    ('', id_key,name , value_5, value_6), 
    ('', id_key,name , value_7, value_8) 
    .. 
] 

因此,第二列表将串联与会员第一个列表转移。

最好的办法是做什么?

回答

2

使用两列表解析从旧建新元组

[(t[0], '') + t[1:] for t in a] + [('',) + t for t in b] 

演示:

>>> a=[('id',  'name', 'value_1', 'value_2'),('id', 'name', 'value_3', 'value_4')] 
>>> b=[('id_key', 'name', 'value_5', 'value_6'),('id_key','name', 'value_7', 'value_8')] 
>>> [(t[0], '') + t[1:] for t in a] + [('',) + t for t in b] 
[('id', '', 'name', 'value_1', 'value_2'), ('id', '', 'name', 'value_3', 'value_4'), ('', 'id_key', 'name', 'value_5', 'value_6'), ('', 'id_key', 'name', 'value_7', 'value_8')] 
+1

FGITW'd由15秒左右......爆炸。 – mgilson 2013-05-01 14:42:37

+0

@mgilson一个不会简单击败Martijn Pieters。 :) – 2013-05-01 14:49:25

+0

@Martijn - 谢谢。答案已被接受。 – NullException 2013-05-01 15:03:55