Как сжать два списка в python
Часто вас может заинтересовать сжатие (или «объединение») двух списков в Python. К счастью, это легко сделать с помощью функции zip().
В этом уроке показано несколько примеров практического использования этой функции.
Пример 1. Сжатие двух списков одинаковой длины в один список
Следующий синтаксис показывает, как сжать два списка одинаковой длины в один:
#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)]
Пример 2. Сжатие двух списков одинаковой длины в словарь.
Следующий синтаксис показывает, как сжать два списка одинаковой длины в словарь:
#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}
Пример 3. Сжатие двух списков разной длины
Если ваши два списка имеют неравную длину, zip() будет усечен до длины более короткого списка:
#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)]
Если вы хотите предотвратить усечение zip() до длины самого короткого списка, вы можете вместо этого использовать функцию zip_longest() из библиотеки itertools .
По умолчанию эта функция заполняет «Нет» для отсутствующих значений:
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)]
Однако вы можете использовать аргумент fillvalue , чтобы указать другое значение заполнения:
#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)]
Полную документацию по функции zip_longest() вы можете найти здесь .