zip()
можно использовать для транспонирования многомерных массивов (например, списков списков).
matrix = [[1, 2, 3], [4, 5, 6]]
, то list(zip(*matrix))
вернет [(1, 4), (2, 5), (3, 6)]
, то есть поменяет строки и столбцы местами.
*matrix
распаковывает массив, и zip()
итерируется по элементам каждой "строки" параллельно.
Функция zip()
в Python полезна для обработки многомерных массивов (например, списков списков или NumPy массивов) путем итерации по нескольким итерируемым объектам одновременно.
Вот несколько примеров, как можно использовать zip()
:
Самый распространенный вариант использования zip()
с многомерными массивами – транспонирование матрицы. Транспонирование означает, что строки меняются местами со столбцами.
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
transposed_matrix = list(zip(*matrix))
print(transposed_matrix) # Вывод: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
В этом примере zip(*matrix)
разворачивает матрицу, передавая строки матрицы как отдельные аргументы в zip()
. zip()
возвращает итератор, который возвращает кортежи, каждый из которых содержит элементы из соответствующих позиций в исходных строках. list()
преобразует этот итератор в список кортежей. В результате получается транспонированная матрица.
Можно использовать zip()
для непосредственной итерации по столбцам многомерного массива:
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
for column in zip(*matrix):
print(column)
# Вывод:
# (1, 4, 7)
# (2, 5, 8)
# (3, 6, 9)
Этот код итерируется по каждому столбцу матрицы, предоставляя возможность обработки данных по столбцам.
Если у вас есть несколько массивов (например, массивы, представляющие разные свойства объектов), которые нужно обработать параллельно, zip()
может быть очень полезным:
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 28]
cities = ["New York", "London", "Paris"]
for name, age, city in zip(names, ages, cities):
print(f"{name} is {age} years old and lives in {city}")
# Вывод:
# Alice is 25 years old and lives in New York
# Bob is 30 years old and lives in London
# Charlie is 28 years old and lives in Paris
В этом примере zip()
позволяет итерировать по массивам names
, ages
и cities
одновременно, что упрощает обработку связанных данных.
zip()
можно использовать для создания словаря из многомерных массивов, например, для сопоставления ключей и значений:
keys = ["a", "b", "c"]
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict) # Вывод: {'a': 1, 'b': 2, 'c': 3}
Важно помнить: zip()
прекращает итерацию, когда один из переданных итерируемых объектов заканчивается. Если ваши массивы имеют разную длину, следует рассмотреть возможность использования itertools.zip_longest()
для обработки всех элементов, возможно, с заполнением отсутствующих значений.