Python | Voeg twee lijsten samen tot een lijst met tupels

| | | | | | |

Voorbeelden:

Invoer:  list1 = [1, 2, 3] list2 = [`a`,` b`, `c `] Uitvoer:  [(1,` a`), (2, `b`), (3,` c`)] Invoer:  list1 = [1, 2, 3, 4] lijst2 = [1, 4, 9] Uitvoer:  [(1, 1), (2, 4), (3, 9), (4, ``)] 

Benadering # 1: Naïef
Voeg beide lijsten samen tot een lijst met tuples met behulp van een for-lus. Maar het nadeel is dat de twee lijsten even lang moeten zijn.


def samenvoegen (list1, list2):


merged_list = [(list1 [i], list2 [i]) for i in bereik ( 0 , len (list1))]

return merged_list


# Driver code

l ist1 = [ 1 , 2 , 3 ]

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

print (samenvoegen (list1, list2 ))

Afsluiten:

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

Aanpak #2: Naïef maar effectiever
Dit methode lost het bovenstaande nadeel op en werkt goed met ongelijke lengtes van twee lijsten. Dit levert ook een try-catch-fout op voor de Index-fout.


def samenvoegen (list1, list2):


merged_list = []

voor i in bereik ( max (( len (list1), len (list2)))):


while True :

probeer :

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

behalve IndexError:

als len (lijst1) > len (list2):

list2. append (``)

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

elif len (lijst1) " len (list2):

lijst1. append (``)

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

ga verder


merged_list.append (tup)

break

return merged_list


# Driver code

lijst1 = [ 1 , 2 , 3 ]

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

print (samenvoegen (list1, list2))

Afsluiten:

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

Benadering # 3 met behulp van zip ()
gebruik de methode zip () om twee lijstitems samen te voegen en ze vervolgens in een tuple te injecteren.

def samenvoegen (list1, list2):


merged_list = tuple ( zip (lijst1, li st2))

return merged_list


# Driver code

list1 = [ 1 , 2 , 3 ]

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

print (samenvoegen (list1, list2))

Afsluiten:

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

Benadering # 4: Met enumerate (), een alternatief voor zip ().

Deze methode gebruikt twee for-lussen om door lijsten te bladeren en de twee lijsten.


def samenvoegen (list1 , list2):


merged_list = [(p1, p2) voor idx1, p1 in enumerate (list1)

voor idx2, p2 in enumer at (lijst2) if idx1 = = idx2]

return merged_list


# Stuurprogrammacode

list1 = [ 1 , 2 , 3 ]

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

print (samenvoegen (list1, list2 ))

Afsluiten:

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

Benadering # 5 Gebruik kaart () en lambda .


# Gebruik kaart () en lambda

def listOfTuples (l1, l2):

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


Stuurprogrammacode

list1 = [ 1 , 2 , 3 ]

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


print (listOfTuples (list1, list2))

Afsluiten:

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