[英]how to zip two lists of tuples in python
我有兩個元組列表,例如:
a = [(1,2,3),(4,5,6),(7,8,9)]
b = [(1,'a'),(4,'b'),(7,'c')]
a和b中每個元組的第一個元素是匹配的,我想得到一個這樣的列表:
merged = [(1,2,3,'a'),(4,5,6,'b'),(7,8,9,'c')]
也許我會有另一個列表,如:
c = [(1,'xx'),(4,'yy'),(7,'zz')]
並在以后合並到“合並”列表,我嘗試了“zip”和“map”,這不適合這種情況。
>>> a = [(1,2,3),(4,5,6),(7,8,9)]
>>> b = [(1,'a'),(4,'b'),(7,'c')]
>>>
>>> [x + (z,) for x, (y, z) in zip(a, b)]
[(1, 2, 3, 'a'), (4, 5, 6, 'b'), (7, 8, 9, 'c')]
檢查第一個元素是否實際匹配,
>>> [x + y[1:] for x, y in zip(a, b) if x[0] == y[0]]
def merge(a,b):
for ax, (first, bx) in zip(a,b):
if ax[0] != first:
raise ValueError("Items don't match")
yield ax + (bx,)
print list(merge(a,b))
print list(merge(merge(a,b),c))
>>> [a[i]+(k,) for i,(j, k) in enumerate(b)]
[(1, 2, 3, 'a'), (4, 5, 6, 'b'), (7, 8, 9, 'c')]
使用timeit
這是返回合並列表的最快發布解決方案。
[ (x,y,z,b[i][1]) for i,(x,y,z) in enumerate(a) if x == b[i][0] ]
這可確保匹配然后合並值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.