Часто вас может заинтересовать сжатие (или «объединение») двух списков в 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() здесь .