Я пытаюсь, но не могу сжать следующие 2 списка определенным образом.

list1=[(1,2,3),(4,5,6),(7,8,9)]
list2=[10,11,12]
zippedlist=[(1,2,3,10),(4,5,6,11),(7,8,9,12)]

Сначала я думал, что распаковка list1 и запуск zip(*list1,list2) сделают эту работу, но теперь я понимаю, что это не сработает.

Я подозреваю, что это можно сделать, используя один или несколько циклов for с функцией zip, но я не слишком уверен, как это будет работать. Любой совет, как мне поступить?

3
Rahul Kumar 9 Июл 2019 в 09:18

4 ответа

Лучший ответ

Или просто используйте оператор + в вашем понимании списка:

list1=[(1,2,3),(4,5,6),(7,8,9)]
list2=[10,11,12]

new_list = [i+(v,) for i,v in zip(list1,list2)]

#[(1, 2, 3, 10), (4, 5, 6, 11), (7, 8, 9, 12)]
1
Henry Yik 9 Июл 2019 в 06:57

Используйте zip

< Сильный > Пример:

list1=[(1,2,3),(4,5,6),(7,8,9)]
list2=[10,11,12]

result = [tuple(list(i) + [v]) for i, v in zip(list1, list2)]
print(result)

< Сильный > Вывод :

[(1, 2, 3, 10), (4, 5, 6, 11), (7, 8, 9, 12)]
3
Rakesh 9 Июл 2019 в 06:20

Более простым для понимания является распространение кортежа и присоединение к списку 2, а затем преобразование его в кортеж снова.

result = list(map(lambda x, y: (*x, y) , list1, list2))

Результат = [(1, 2, 3, 10), (4, 5, 6, 11), (7, 8, 9, 12)]

1
Bob White 9 Июл 2019 в 06:43

Вы также можете использовать map:

list(map(lambda x, y: x +(y,), list1, list2))
# [(1, 2, 3, 10), (4, 5, 6, 11), (7, 8, 9, 12)]
3
Gerges 9 Июл 2019 в 06:30