Подтвердить что ты не робот

Python: сплющивание почтового индекса?

У меня есть два списка, которые я хочу сделать zip:

a = ((1,2,3), (4,5,6), ... )
h = ('a','b', ... )

Простой zip(a,h) возвращает это:

[ ((1,2,3),'a'), ((4,5,6),'b'), ... ]

Есть ли какой-нибудь умный способ вернуть это?

[ (1,2,3,'a'), (4,5,6,'b'), ... ]
4b9b3361

Ответ 1

Вы можете использовать конкатенацию кортежа в понимании списка:

>>> a = ((1, 2, 3), (4, 5, 6))
>>> h = ('a', 'b')
>>> [x + (y,) for x, y in zip(a, h)]
[(1, 2, 3, 'a'), (4, 5, 6, 'b')]

Ответ 3

Вы можете использовать деструктурирование "вложенных" кортежей:

a = ((1, 2, 3), (4, 5, 6))
h = ('a', 'b')
out = [(x, y, z, c) for (x, y, z), c in zip(a, h)]

Ответ 4

Простое решение, если длина элементов a зафиксирована на 3:

a = ((1, 2, 3), (4, 5, 6))
h = ('a', 'b')

[(x[0], x[1], x[2], y) for x, y in zip(a, h)] 

Ответ 5

Вы можете использовать цепочку из itertools:

>>> from itertools import chain
>>> a = ((1,2,3), (4,5,6), (7,8,9) )
>>> h = ('a','b', 'c' )
>>> [ tuple(chain(x,y)) for x,y in zip(a,h) ]
[(1, 2, 3, 'a'), (4, 5, 6, 'b'), (7, 8, 9, 'c')]