我有两个清单:
a = [(1,2,3),(4,5,6)]
b = [7,8]
我想把它合并成:
c = [(1,2,3,7),(4,5,6,8)]
我用过zip(a,b)
,但结果似乎不正确。任何人都可以帮忙吗?
zip()
只会将元组和整数配对。您还需要连接元组和新项目:
c = [aa + (bb,)
for aa, bb in zip(a, b)]
>>> a = [(1,2,3),(4,5,6)]
>>> b = [7,8]
>>> c = zip(*a)+[b] #c looks like [(1,4),(2,5),(3,6),(7,8)]
>>> print zip(*c) #zip it back together
[(1, 2, 3, 7), (4, 5, 6, 8)]
>>>
尝试
map ( lambda x: x[0]+(x[1],), zip(a,b))
还有另一个版本:
from itertools import izip
[x+(y,) for x,y in izip(a,b)]
应该是高效的,它以一种可读的方式表达了你真正在做什么。
还有一个:
map(lambda t, e: t + (e,), a, b)
无需压缩和解包;map
可以同时获取两个列表。
print((a[0]+(b[0],),a[1]+(b[1],)))
这对我来说似乎很清楚:
[x + (b[i],) for i,x in enumerate(a)]