我有两个列表:
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
可以同时接受两个列表。len(a) != len(b)
,这个方法是行不通的。map
会用None
填充多余的部分,然后就会出错。 - st0lezip
默默丢弃元素,抛出异常会更好吗? - tobias_kprint((a[0]+(b[0],),a[1]+(b[1],)))
这对我来说很清楚:
[x + (b[i],) for i,x in enumerate(a)]
a
是一个元组列表。元组是一种不可变序列类型。 - Bryan