将元组压缩并拆成相同的尺寸

时间:2018-09-23 23:45:34

标签: python

给出两个列表

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)]

3 个答案:

答案 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)