Функция zip() в Python: объединение итерируемых объектов
Python

Функция zip() в Python: объединение итерируемых объектов

Razilator

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

Синтаксис zip() в Python

Синтаксис функции zip() прост и понятен:

zip(*iterables)
  • где *iterables - несколько итерируемых объектов, которые нужно объединить в кортежи.

Примеры использования zip()

Пример 1. Объединение двух списков в список кортежей:

main.py
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 18, 30]

people = zip(names, ages)

print(list(people)) # [('Alice', 25), ('Bob', 18), ('Charlie', 30)]

Пример 2. Использование zip() для итерации по двум спискам одновременно:

main.py
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 18, 30]

for name, age in zip(names, ages):
    print(name, age)
    
# Вывод    
# Alice 25
# Bob 18
# Charlie 30

Пример 3. Объединение нескольких списков:

main.py
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

result = list(zip(list1, list2, list3))
print(result) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

Пример 4. Распаковка значений из списка кортежей

Мы также можем использовать zip() для распаковки значений из списка кортежей. Например, если у нас есть список кортежей, содержащих имя и возраст студентов:

main.py
students = [('Alice', 25), ('Bob', 18), ('Charlie', 30)]

# Распакуем значения
names, ages = zip(*students)

print(names)  # ('Alice', 'Bob', 'Charlie')
print(ages)   # (25, 18, 30)

Обратите внимание на звездочку перед именем списка. Это позволяет распаковать список кортежей, передав его в zip() как несколько аргументов.

Теперь в переменной names у нас будет кортеж с именами студентов, а в переменной ages - кортеж с их возрастами.

Это может быть полезно, если мы хотим выполнить какую-то операцию с именами и возрастами студентов отдельно.

Пример 5. Использование zip() и map() для вычисления произведения соответствующих элементов из двух списков:

Функция map() позволяет применять функцию к каждому элементу списка. Когда используется совместно с функцией zip(), можно применять функцию к каждой паре элементов из нескольких списков.

main.py
list1 = [1, 2, 3]
list2 = [4, 5, 6]

result = list(map(lambda x, y: x*y, list1, list2))
print(result) # [4, 10, 18]

Пример 6. Использование zip() для создания словаря

Мы также можем использовать zip() для создания словаря из двух списков - один список содержит ключи, а другой значения.

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

main.py
keys = ['name', 'age', 'gender']
values = ['Alice', 25, 'female']

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

main.py
person = dict(zip(keys, values))
print(person)  # {'name': 'Alice', 'age': 25, 'gender': 'female'}

Пример 7. Использование zip() для транспонирования матрицы

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

main.py
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

transposed_matrix = [list(row) for row in zip(*matrix)]
print(transposed_matrix)  # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

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

Заключение

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