Jak skompresować dwie listy w pythonie


Często możesz być zainteresowany kompresją (lub „scalaniem”) dwóch list w Pythonie. Na szczęście można to łatwo zrobić za pomocą funkcji zip().

W tym samouczku przedstawiono kilka przykładów praktycznego wykorzystania tej funkcji.

Przykład 1: Skompresuj dwie listy o równej długości w jedną listę

Poniższa składnia pokazuje, jak skompresować dwie listy o równej długości w jedną:

 #define list a and list b
a = ['a', 'b', 'c']
b = [1, 2, 3]

#zip the two lists together into one list
list( zip (a,b))

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

Przykład 2: Kompresuj dwie listy o równej długości do słownika

Poniższa składnia pokazuje, jak skompresować dwie listy o równej długości do słownika:

 #define list of keys and list of values
keys = ['a', 'b', 'c']
values = [1, 2, 3]

#zip the two lists together into one dictionary
dict( zip (keys, values)) 

{'a': 1, 'b': 2, 'c': 3}

Przykład 3: Kompresuj dwie listy o różnej długości

Jeśli dwie listy mają różną długość, funkcja zip() zostanie obcięta do długości krótszej listy:

 #define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together into one list
list( zip (a,b))

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

Jeśli chcesz zapobiec obcinaniu zip() do długości najkrótszej listy, możesz zamiast tego użyć funkcji zip_longest() z biblioteki itertools .

Domyślnie ta funkcja wypełnia „Brak” w przypadku brakujących wartości:

 from itertools import zip_longest

#define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together without truncating to length of shortest list
list( zip_longest (a, b))

[('a', 1), ('b', 2), ('c', 3), ('d', None)]

Można jednak użyć argumentu fillvalue , aby określić inną wartość wypełnienia:

 #define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together, using fill value of '0'
list( zip_longest (a, b, fillvalue= 0 ))

[('a', 1), ('b', 2), ('c', 3), ('d', 0)]

Pełną dokumentację funkcji zip_longest() znajdziesz tutaj .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *