Python | Concatenar duas listas em uma lista de tuplas

| | | | | | |

Exemplos:

Entrada:  lista1 = [1, 2, 3] lista2 = [`a`,` b`, `c `] Saída:  [(1,` a`), (2, `b`), (3,` c`)] Entrada:  list1 = [1, 2, 3, 4] list2 = [1, 4, 9] Saída:  [(1, 1), (2, 4), (3, 9), (4, ``)] 

Abordagem nº 1: Naive
Concatene ambas as listas em uma lista de tuplas usando um loop for. Mas a desvantagem é que as duas listas devem ter o mesmo tamanho.


def mesclar (list1, list2):


merged_list = [(list1 [i], list2 [i]) para i em intervalo ( 0 , len (list1))]

return merged_list


# Código do driver

l ist1 = [ 1 , 2 , 3 ]

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

print (merge (list1, list2 ))

Sair:

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

Abordagem nº 2: ingênua, mas mais eficaz
Esta O método corrige a desvantagem acima e funciona bem com comprimentos desiguais de duas listas. Isso também fornece um erro try catch para o erro Index.


def mesclar (lista1, lista2):


merged_list = []

para i em intervalo ( max (( len (list1), len (list2))):


while Verdadeiro :

tente :

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

exceto IndexError:

if len (list1) > len (list2):

list2. append (``)

tup = (lista1 [i], lista2 [i])

elif len (lista1) " len (list2):

list1. append (``)

tup = (lista1 [i], lista2 [i])

continuar


merged_list.append (tup)

break

return merged_list


# Código do driver

list1 = [ 1 , 2 , 3 ]

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

print (mesclar (lista1, lista2))

Sair:

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

Abordagem nº 3 Usando zip ()
usando o método zip() para concatenar dois itens de lista e depois injetá-los em uma tupla.

def merge (list1, list2):


merged_list = tupla ( zip (lista1, li st2))

return merged_list


# Código do driver

lista1 = [ 1 , 2 , 3 ]

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

print (merge (list1, list2))

Sair:

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

Abordagem # 4: Usando enumerate (), uma alternativa para zip ().

Este método usa dois loops for para iterar através de listas e concatenar o duas listas.


def mesclar (list1 , list2):


merged_list = [(p1, p2) para idx1, p1 em enumerar (list1)

para idx2, p2 em enumer comeu (list2) if idx1 = = idx2]

return merged_list


# Código do driver

list1 = [ 1 , 2 , 3 ]

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

print (merge (list1, list2 ))

Sair:

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

Abordagem nº 5 Usando map() e lambda .


# Usando map () e lambda

def listOfTuples (l1, l2):

return list ( map ( lambda x, y: (x, y), l1, l2))


Código do driver

list1 = [ 1 , 2 , 3 ]

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


print (listOfTuples (list1, list2))

Sair:

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