Функция Python zip ()

В этой статье мы рассмотрим, как использовать встроенную функцию Python zip (). Функция zip () - это встроенная функция Python, которая позволяет нам объединять соответствующие элементы из нескольких последовательностей в один список кортежей. Последовательности - это аргументы, принимаемые функцией zip (). Может быть предоставлено любое количество последовательностей, но наиболее распространенным вариантом использования является объединение соответствующих элементов в две последовательности. Например, предположим, что у нас есть два списка ниже: >>> cars = ['unicyc

В этой статье мы рассмотрим, как использовать встроенную функцию zip()

Функция zip() - это встроенная функция Python, которая позволяет нам объединять соответствующие элементы из нескольких последовательностей в один список кортежей . Последовательности - это аргументы, принимаемые функцией zip() Может быть предоставлено любое количество последовательностей, но наиболее распространенным вариантом использования является объединение соответствующих элементов в две последовательности.

Например, предположим, что у нас есть два списка ниже:

 >>> vehicles = ['unicycle', 'motorcycle', 'plane', 'car', 'truck'] 
 >>> wheels = [1, 2, 3, 4, 18] 

Мы можем использовать zip() для связывания элементов из этих двух списков в зависимости от их порядка:

 >>> list(zip(vehicles, wheels)) 
 [('unicycle', 1), ('motorcycle', 2), ('plane', 3), ('car', 4), ('truck', 18)] 

Обратите внимание, что на выходе получается последовательность кортежей, где каждый кортеж объединяет элементы входных последовательностей с соответствующими индексами.

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

 >>> vehicles = ['unicycle', 'motorcycle', 'plane', 'car', 'truck'] 
 >>> wheels = [1, 2, 3] 
 >>> list(zip(vehicles, wheels)) 
 [('unicycle', 1), ('motorcycle', 2), ('plane', 3)] 

Поскольку wheels короче (3 элемента вместо 5, которые vehicles ), последовательность остановилась на «плоскости».

Как упоминалось ранее, zip() может использоваться более чем с двумя последовательностями:

 >>> vehicles = ['unicycle', 'motorcycle', 'plane', 'car', 'truck'] 
 >>> wheels = [1, 2, 3, 4, 18] 
 >>> energy_sources = ['pedal', 'gasoline', 'jet fuel', 'gasoline', 'diesel'] 

 >>> list(zip(vehicles, wheels, energy_sources)) 
 [('unicycle', 1, 'pedal'), ('motorcycle', 2, 'gasoline'), ('plane', 3, 'jet fuel'), ('car', 4, 'gasoline'), ('truck', 18, 'diesel')] 

Одна из причин для соединения нескольких таких последовательностей состоит в том, чтобы создать более чистый способ перебора элементов в нескольких последовательностях. Без функции zip() нам пришлось бы сделать что-то вроде этого:

 >>> for i in range(len(vehicles)): 
 ... print('A ' + vehicles[i] + ' has ' + str(wheels[i]) + ' wheels and runs on ' + energy_sources[i]) 
 ... 
 A unicycle has 1 wheels and runs on pedal 
 A motorcycle has 2 wheels and runs on gasoline 
 A plane has 3 wheels and runs on jet fuel 
 A car has 4 wheels and runs on gasoline 
 A truck has 18 wheels and runs on diesel 

Но с zip() мы можем использовать следующий более чистый синтаксис с помощью распаковки кортежей:

 >>> for v, w, es in zip(vehicles, wheels, energy_sources): 
 ... print('A ' + v + ' has ' + str(w) + ' wheels and runs on ' + es) 
 ... 
 A unicycle has 1 wheels and runs on pedal 
 A motorcycle has 2 wheels and runs on gasoline 
 A plane has 3 wheels and runs on jet fuel 
 A car has 4 wheels and runs on gasoline 
 A truck has 18 wheels and runs on diesel 

И последнее, что нужно понять о функции zip() - это то, что на самом деле она возвращает итератор , а не список кортежей. Обратите внимание, что в наших первых двух примерах выше мы заключили функцию zip() list() чтобы преобразовать результат в список. Если бы мы попытались отобразить возвращаемое значение функции zip() напрямую, мы бы увидели что-то вроде этого:

 >>> zip(vehicles, wheels) 
 <zip object at 0x1032caf48> 

Этот «zip-объект» является итеративным экземпляром Zip , что означает, что он будет возвращать свое содержимое одно за другим в цикле for, а не все сразу, как это делает список. Это более эффективно для больших последовательностей, которые потребляли бы очень много памяти при доступе ко всем сразу.

об авторе

Эта статья была написана Якобом Стопаком, консультантом по программному обеспечению и разработчиком, стремящимся помочь другим улучшить свою жизнь с помощью кода. Джейкоб является создателем Initial Commit - сайта, посвященного тому, чтобы помочь любознательным разработчикам узнать, как написаны их любимые программы. Его избранный проект помогает людям изучать Git на уровне кода.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus

Содержание