Встроенная функция Python zip() — это мощная функция для объединения двух или более итераций в одну итерацию.
- Синтаксис
- Примеры
- Пример 1
- Пример 2: распаковка zip-объектов
- Пример 3: распаковка заархивированного объекта
- Пример 4: ZIP-архив с *args
- Пример 5
- Пример 6: zip разной длины
- Пример 7
Синтаксис
Синтаксис функции Python zip() выглядит следующим образом:
zip(*iterables)
Примеры
Теперь давайте посмотрим несколько примеров использования функции Python zip().
Пример 1
Вот самый простой способ использования функции zip(): нужно передать в функцию две итерации (в нашем случае это два списка). Функция вернёт итератор, который будет создавать кортежи из элементов каждой входной итерации до тех пор, пока не будет исчерпана самая короткая итерабельность.
# Create a list of numbers numbers = [1, 2, 3] # Create a list of strings representing countries countries = ['USA', 'United Kingdom', 'canada'] # Zip the two lists together into pairs zipped = zip(numbers, countries) # Loop over each pair in the zipped list for pair in zipped: # Print the pair print(pair)
В приведённом выше коде определены два списка: номера и страны. Номера содержат три целых числа, а страны — три строки с названиями стран.
- Затем мы используем функцию zip() для создания нового списка, который будет содержать пары элементов из списков с номерами и странами.
- И наконец, цикл for используется для последовательного перебора каждой пары элементов в сжатом списке и вывода их на экран.
Output:(1, 'USA') (2, 'United Kingdom') (3, 'canada')
Пример 2: распаковка zip-объектов
Если вы используете функцию zip() для одновременного перебора нескольких итераций, то можете извлечь полученные кортежи в отдельные переменные. Это даст вам возможность работать с каждым элементом по отдельности.
# Create a list of numbers numbers = [1, 2, 3] # Create a list of strings representing countries countries = ['USA', 'United Kingdom', 'canada'] # Zip the two lists together into pairs zipped = zip(numbers, countries) # Loop over each pair in the zipped list for num, country in zipped: # Unpack the pair into variables num and country # Print the variables print(num, country)
В приведённом выше коде мы создаём два списка: «числа» и «страны». В списке «числа» будут храниться три целых числа, а в списке «страны» — три строки.
- Затем функция zip() используется для создания нового списка, который мы назовём zipped. В этом списке будут пары соответствующих элементов из двух исходных списков: номеров и стран. Каждая пара будет состоять из номера и названия страны.
- Затем мы используем цикл for для перебора всех пар в сжатом списке. В этом цикле мы используем распаковку кортежа, чтобы присвоить первый элемент каждой пары переменной num, а второй элемент — переменной country.
- На каждом шаге цикла вызывается функция print(), которая выводит на экран значения переменных num и Country.
1 USA 2 United Kingdom 3 canada
Пример 3: распаковка заархивированного объекта
Если у вас есть заархивированный объект (то есть итератор, возвращаемый функцией `zip()`), вы можете использовать эту же функцию, чтобы снова распаковать его на отдельные итерации. Для этого вам нужно использовать оператор `*` (звёздочка), чтобы преобразовать заархивированный объект в отдельные аргументы для функции `zip()`.
# Create a list of numbers numbers = [1, 2, 3] # Create a list of strings representing countries countries = ['USA', 'United Kingdom', 'canada'] # Zip the two lists together into pairs zipped = zip(numbers, countries) # Unzip the pairs back into separate lists using the * operator nums, countrs = zip(*zipped) # Print the resulting lists print(nums) print(countrs)
В представленном выше коде есть два списка: один содержит числа, а другой — названия стран. Оба списка включают в себя как целые числа, так и строки.
- Затем код применяет функцию zip() для создания нового списка, в котором элементы из чисел и стран идут парами.
- Затем с помощью функции zip() мы извлекаем из сжатого списка отдельные списки чисел и подсчётчиков. Для этого мы снова используем оператор *. Полученные списки чисел и подсчётчиков выводятся на консоль.
Output:(1, 2, 3) ('USA', 'United Kingdom', 'canada')
Пример 4: ZIP-архив с *args
Этот метод использует синтаксис *args в сочетании с функцией zip() для сжатия и объединения произвольного количества итераций, передаваемых в функцию в виде отдельных аргументов. Это может быть полезно, когда вам нужно работать с переменным количеством итераций, например, при создании функции, которая может принимать различное количество аргументов.
# Define a function named "combine" that takes any number of lists as input def combine(*args): # Use the zip function to combine the input lists into a single list of tuples zipped = zip(*args) # Use a list comprehension to create a new list where each element is the sum of the corresponding elements in each tuple return [sum(pair) for pair in zipped] # Call the combine function with three input lists result = combine([1, 2, 3], [4, 5, 6], [7, 8, 9]) # Print the resulting list print(result)
В приведённом выше коде определяется функция join(), которая принимает любое количество списков.
- Внутри функции используется функция zip(), которая объединяет входные списки в один список кортежей. Каждый кортеж содержит соответствующие элементы из каждого исходного списка.
- Затем мы используем понимание списка, чтобы создать новый список. Каждый элемент этого нового списка будет представлять собой сумму соответствующих элементов из каждого кортежа.
- Наконец, результирующий список возвращается функцией associations().
Output: [12, 15, 18]
Пример 5
Оператор «*» используется вместе с функцией zip() для распаковки списка.
Пример:
val1 = ['a', 'b', 'c'] val2 = [1, 2, 3] res = zip(val1, val2) res_list = list(res) print(res_list) v1, v2 = zip(*res_list) print('v1 =', v1) print('v2 =', v2)
Ниже вы можете увидеть результат распаковки значения Python, полученной с помощью функции zip().
Пример 6: zip разной длины
- В этом примере мы определили итераторы разной длины, и первые элементы всех этих итераторов объединены вместе. Также соединены между собой вторые, третьи и четвёртые элементы.
- Однако пятых элементов нет, поэтому остальные итераторы не попадают в итоговый результат.
Пример:
list1 = ['Rohan', 'Preeti', 'Kislay', 'Ankita'] list2 = ['Red', 'Blue', 'Green', 'Pink', 'Black'] list3 = ['101', '201', '301', '401', '501'] result = zip(list1, list2, list3) print(list(result))
Чтобы увидеть результат работы функции Python zip для списков разной длины, вы можете обратиться к изображению ниже.
Пример 7
В этом примере функция возвращает итератор кортежей для заданных списков. В Python объект zip работает как итератор, возвращая объект zip.
Пример:
val1 = [101,102,103] val2 = ['One','Two','Three'] result = zip(val1, val2) print(result) print(list(result))
Чтобы увидеть выходные данные для объекта Python в формате zip, вы можете посмотреть на скриншот ниже.