zip в Python

Функция zip в Python

Функция zip в Python — это встроенная функция, которая принимает на вход несколько итерируемых объектов (например, списков) и поэлементно группирует их в итератор кортежей:

  '''Простой пример работы функции zip(): '''

  letters = ['а', 'б', 'в']
  numbers = [1, 2, 3]
  res = list(zip(letters, numbers))
  print(res)
Вывод на экран:
 [('а', 1), ('б', 2), ('в', 3)]

Ниже мы разберем работу функции zip() более подробно и рассмотрим примеры использования zip() на практике:

Почему функция zip() так называется, и как она работает?

В переводе с английского «zip» — это застежка-молния. Основная задача молнии — совместить соответствующие зубцы половинок застежки. Встроенная в Python функция zip() не случайно получила такое название. Она принимает на вход несколько итерируемых объектов и, по аналогии с застежкой, поэлементно группирует их. Таким образом, первый элемент, возвращенный функцией zip(), содержит только первые элементы итерируемых объектов, второй — вторые, и так далее. Процесс группировки остановится, как только элементы самого короткого итерируемого объекта будут исчерпаны. Для доступа к группам, сформированным функцией zip(), нужно преобразовать полученный результат в список, словарь, множество, либо кортеж с помощью соответствующих функций list(), dict(), set(), tuple().

Примеры объединения элементов в список и словарь с помощью функции zip():

Как объединить 2 списка в список кортежей?

  fruits = ['груши', 'яблоки', 'лимоны']
  weights = [2, 3, 1]
    
  # получим список кортежей 
  # из сгруппированных эл-в:
  fruits_lst = list(zip(fruits, weights))
  print(fruits_lst)
 Вывод на экран:
 [('груши', 2), ('яблоки', 3), ('лимоны', 1)] 

В рассмотренном примере мы поэлементно объединили списки fruits и weights, после чего преобразовали полученный итератор кортежей в список с помощью функции list().

Как создать словарь из двух списков?

  fruits = ['груши', 'яблоки', 'лимоны']
  weights = [2, 3, 1]

  # создадим из исходных списков словарь:
  fruits_dict = dict(zip(fruits, weights))
  print(fruits_dict)
 Результат на экране:
 {'груши': 2, 'яблоки': 3, 'лимоны': 1} 

Как работает функция zip() в случае перебора итерируемых объектов разной длины?

В том случае, если аргументами функции zip() являются итерируемые объекты разной длины, то процесс поэлементной остановится, как только элементы самого короткого итерируемого объекта будут исчерпаны:

  letters = ['а', 'б', 'в', 'г']
  numbers = [1, 2, 3]
  res = list(zip(letters, numbers))
  print(res)
 Вывод на экран:
 [('а', 1), ('б', 2), ('в', 3)] 

В приведенном выше примере представлены 2 списка: список letters длиной 4 и список numbers длиной 3. Поэтому итератор, полученный после применения функции zip() будет содержать 3 группы элементов, в соответствии с длиной наиболее короткого списка numbers.

У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: Кодим на Python!
Вместе «питонить» веселее! 😉

Примеры использования zip в Python для выполения одновременных операций с элементами списков.

Cуммирование элементов 3-х списков с помощью функции zip():

  lst1 = [0, 10, 20]
  lst2 = [10, 10, 10]
  lst3 = [1, 2, 3]

  sum = [ a + b + c for a, b, c in zip(lst1, lst2, lst3)]
  print(sum)
 Вывод на экран:  
 [11, 22, 33] 

В приведенном выше примере все i-е элементы списков lst1, lst2 и lst3 суммируются (a+b+c), а вычисленные суммы записываются на i-е позиции списка sum.

Использование функции zip() для перебора нескольких словарей:

Начиная с версии 3.6 Python словари сохраняют порядок введенных пар ключ-значение. Это позволяет использовать функцию zip() для одновременного перебора нескольких словарей:

  pet1 = {'питомец': 'кот', 'кличка': 'Гав', 'возраст': 1 }
  pet2 = {'питомец': 'пёс', 'кличка': 'Шарик', 'возраст': 2 }

  pets = list(zip(pet1.items(), pet2.items()))
  for (key1, val1), (key2, val2) in pets:
      print(f'{key1}: {val1}, {val2}')
 Вывод на экран:
 питомец: кот, пёс
 кличка: Гав, Шарик
 возраст: 1, 2 

В приведенном выше примере с помощью функции zip() мы получаем за одну итерацию по 2 пары ключ — значение (одна пара для списка pet1, вторая — для списка pet2). После преобразования полученных результатов в списки, выводим значения в желаемом порядке.

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