Автор оригинала: 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 на уровне кода.