Рубрики
Без рубрики

Функция Python zip()

Автор оригинала: Jacob Stopak.

Функция Python zip()

В этой статье мы рассмотрим, как использовать встроенную функцию Python 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-объект” является итеративным экземпляром класса Zip , что означает, что он будет возвращать свое содержимое по одному в цикле for, а не все сразу, как это делает список. Это более эффективно для больших последовательностей, которые были бы очень интенсивны в памяти, если бы к ним обращались все сразу.

Об авторе

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