Встроенная функция Python zip() — это мощная функция для объединения двух или более итераций в одну итерацию.

Содержание

Синтаксис

Синтаксис функции 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().

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 для списков разной длины, вы можете обратиться к изображению ниже.

zip разной длины.

Пример 7

В этом примере функция возвращает итератор кортежей для заданных списков. В Python объект zip работает как итератор, возвращая объект zip.

Пример:

val1 = [101,102,103]
val2 = ['One','Two','Three']
result = zip(val1, val2)
print(result)
print(list(result))

Чтобы увидеть выходные данные для объекта Python в формате zip, вы можете посмотреть на скриншот ниже.

zip-объект Python

Добавить комментарий