给出两个列表
A = ['a','b','c','d']
B = [(1,11),(2,22),(3,33),(4,44)]
我想压缩到列表[('a', 1, 11), ('b', 2, 22), ('c', 3, 33), ('d', 4, 44)]
中。
做list(zip(a, b))
会得到[('a', (1, 11)), ('b', (2, 22)), ('c', (3, 33)), ('d', (4, 44))]
。
解包B无效[('a', 1, 2, 3, 4), ('b', 11, 22, 33, 44)]
。
答案 0 :(得分:4)
使用python3.6,您可以将其压缩并使用解包运算符:
>>> [(a, *b) for a, b in zip(A, B)]
[('a', 1, 11), ('b', 2, 22), ('c', 3, 33), ('d', 4, 44)]
对于较旧的版本,执行元组串联...
>>> [(a, ) + b for a, b in zip(A, B)]
[('a', 1, 11), ('b', 2, 22), ('c', 3, 33), ('d', 4, 44)]
...达到相同的效果。
答案 1 :(得分:1)
或尝试map
:
>>> list(map(lambda x,y: (x,)+y,A,B))
[('a', 1, 11), ('b', 2, 22), ('c', 3, 33), ('d', 4, 44)]
答案 2 :(得分:0)
尽管Coldspeed的答案要好得多,但这是我的2美分
l = [(z[0], z[1][0], z[1][1]) for z in zip (A, B)]
print(l)