Python

Как использовать функцию Zip в Python

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

О функции Zip

Как указывалось ранее, функция «zip» используется для создания пар из элементов нескольких повторяемых объектов. Рассмотрим приведенный ниже пример, чтобы понять основной синтаксис и использование функции zip:

list1 = ["a", "b", "c"]
list2 = ["яблоко", "мяч", "кошка"]
zipped = zip (список1, список2)
печать (список (в архиве))

Первые два оператора в приведенном выше примере кода определяют два списка, содержащие некоторые элементы. Затем используется функция «zip», передавая в качестве аргументов переменные «list1» и «list2». Это основной синтаксис функции «zip». Вам просто нужно передать списки или другие допустимые упорядоченные итерации в качестве аргументов, элементы которых вы хотите объединить. Наконец, оператор печати используется для получения вывода «заархивированной» переменной. После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

[('a', 'яблоко'), ('b', 'ball'), ('c', 'cat')]

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

Проще говоря, функция «zip» выбирает элементы одного индекса из двух списков и объединяет их как пару в кортеж. Таким образом, 0-й элемент из «list1» объединяется с 0-м элементом «list2», 1-й элемент из «list1» объединяется с 1-м элементом «list2» и так далее. Функция Zip перемещается слева направо, и кортеж, содержащий парные элементы, имеет тот же индекс, что и элементы, хранящиеся в них.

Использование Zip, когда у итераций разное количество элементов

В приведенном выше примере оба списка имеют одинаковое количество элементов. Если вы имеете дело с некоторым кодом, в котором оба списка не имеют одинакового количества элементов, функция «zip» остановится на последнем элементе списка, имеющем наименьшее количество элементов.

В приведенном ниже примере функция «zip» остановится на элементе «c», независимо от того, имеет ли «list2» еще один элемент.

list1 = ["a", "b", "c"]
list2 = ["яблоко", "мяч", "кот", "кукла"]
zipped = zip (список1, список2)
печать (список (в архиве))

После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

[('a', 'яблоко'), ('b', 'мяч'), ('c', 'кошка')]

Вы можете использовать более двух итераций при использовании функции Zip

Обычно функция «zip» используется для сравнения двух итерационных объектов. Однако вы можете передать любое количество итераций в качестве аргументов функции «zip». Принцип остановки на последнем элементе самого короткого списка будет по-прежнему применяться.

list1 = ["a", "b", "c"]
list2 = ["яблоко", "мяч", "кот", "кукла"]
list3 = ["5", "3"]
zipped = zip (список1, список2, список3)
печать (список (в архиве))

После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

[('a', 'яблоко', '5'), ('b', 'мяч', '3')]

Создание индивидуальных списков из объекта типа Zip

Если у вас уже есть объект «zip», вы можете использовать его для повторного заполнения отдельных списков, которые ранее использовались при первом вызове функции zip для них.

list1 = ["a", "b", "c"]
list2 = ["яблоко", "мяч", "кот", "кукла"]
list3 = ["5", "3"]
zipped = zip (список1, список2, список3)
l1, l2, l3 = zip (* застегивается)
печать (список (l1), список (l2), список (l3))

После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

['a', 'b'] ['яблоко', 'мяч'] ['5', '3']

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

Использование Zip, когда вы хотите, чтобы элементы не подвергались наибольшему итерации

В нескольких приведенных выше примерах вы могли заметить, что функция «zip» по умолчанию останавливается на последнем элементе самого короткого итеративного. Что, если вы хотите, чтобы он продолжал итерацию, пока не достигнет последнего элемента самой длинной итерации?

В таком случае вам придется использовать метод «zip_longest ()» из модуля Python «itertools». Он работает так же, как функция «zip», с одной небольшой разницей в том, что он останавливается на последнем элементе самого длинного итеративного типа.

из itertools import zip_longest
list1 = ["a", "b", "c"]
list2 = ["яблоко", "мяч", "кот", "кукла"]
list3 = ["5", "3"]
zipped = zip_longest (список1, список2, список3)
печать (список (в архиве))

После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]

Отсутствующие значения заполняются объектами типа «Нет». Вы также можете указать собственное значение для заполнения, передав дополнительный аргумент fillvalue методу zip_longest.

из itertools import zip_longest
list1 = ["a", "b", "c"]
list2 = ["яблоко", "мяч", "кот", "кукла"]
list3 = ["5", "3"]
zipped = zip_longest (список1, список2, список3, fillvalue = "my_value")
печать (список (в архиве))

После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'кукла ',' my_value ')]

Заключение

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

SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...
0 А.D. Руководство
Из множества существующих стратегических игр 0 A.D. удается выделиться как всеобъемлющее название и очень глубокая тактическая игра, несмотря на то, ч...