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 .