Python | Объединение двух списков в список кортежей

| | | | | | |

Примеры:

Ввод:  list1 = [1, 2, 3] list2 = [`a`,` b`, `c `] Вывод:  [(1,` a`), (2, `b`), (3,` c`)] Ввод:  list1 = [1, 2, 3, 4] list2 = [1, 4, 9] Вывод:  [(1, 1), (2, 4), (3, 9), (4, ``)] 

Подход № 1: Простой
Объедините оба списка в список кортежей, используя цикл for. Но недостатком является то, что два списка должны быть одинаковой длины.


def merge (список1, список2):


merged_list = [(list1 [i], list2 [i]) for i в диапазон ( 0 , len (list1))]

return merged_list


# Код драйвера

list1 = [ 1 , 2 , 3 ]

list2 = [ `a` , ` b` , `c` ]

print (объединить (list1, list2 ))

Выход:

[ (1, `a`), (2, `b`), (3, `c`)] 

Подход № 2: Наивный, но более эффективный
Это метод устраняет указанный выше недостаток и хорошо работает с неравными длинами двух списков. Это также обеспечивает попытку перехвата ошибки индекса.


def объединить (list1, list2):


merged_list = []

for i in range ( max (( len (list1), len (list2)))):


while True :

попробуйте :

tup = (list1 [i], list2 [i])

кроме IndexError:

if len (list1) > len (list2):

list2. добавить (``)

tup = (список1 [i], список2 [i])

elif len (список1) " len (list2):

list1. добавить (``)

tup = (список1 [i], список2 [i])

продолжить


merged_list.append (tup)

break

return merged_list


# Код драйвера

list1 = [ 1 , 2 , 3 ]

list2 = [ `a` , ` b` , `c` ]

print (объединить (list1, list2))

Выход:

 [(1, `a`), (2, `b`), (3, `c`)] 

Подход № 3 Использование zip()
используя метод zip() для объединения двух элементов списка и последующего добавления их в кортеж.

def merge (list1, list2):


merged_list = tuple ( zip (список1, ли st2))

return merged_list


# Код драйвера

list1 = [ 1 , 2 , 3 ]

list2 = [ `a` , ` b` , ` c` <класс кода ="p lain ">]

print (объединить (list1, list2))

Выход:

((1, `a`), (2, `b`), (3, `c`)) 

Подход № 4: Использование enumerate(), альтернативы zip().

В этом методе используются два цикла for для перебора списков и объединения два списка.


def merge (list1 , list2):


merged_list = [(p1, p2) for idx1, p1 in перечислить (list1)

for idx2, p2 in enumer ели (list2) if idx1 = = idx2]

вернуть merged_list


# Код драйвера

list1 = [ 1 , 2 , 3 ]

list2 = [ `a` , ` b` , `c` ]

print (объединить (list1, list2 ))

Выход:

[ (1, `a`), (2, `b`), (3, `c`)] 

Подход № 5 Использование map() и <код>лямбда .


# Использование map() и лямбда

def listOfTuples (l1, l2):

return список ( map ( lambda x, y: (x, y), l1, l2))


Код драйвера

list1 = [ 1 , 2 , 3 ]

list2 = [ `a` , <код e class = "string"> `b` , ` c` ]


print (listOfTuples (list1, list2))

Выход:

[(1, `a`), (2, `b`), (3, `c`)]