Программа курса:
Разбор задачи: Транспонированная матрица
Предложенный нами код решения:
def transpose(matrix):
"""
:type matrix: List[List[int]]
:rtype: List[List[int]]
"""
# Используем функцию zip для транспонирования
return [list(row) for row in zip(*matrix)]
1. Аргументы функции
Функция принимает один аргумент:
matrix— список списков, представляющий матрицу, где каждый вложенный список является строкой матрицы.
2. Что делает функция zip?
Функция zip — встроенный инструмент Python, который объединяет элементы из нескольких последовательностей (списков, кортежей и т.д.) по их индексам. Например:
zip([1, 2, 3], [4, 5, 6], [7, 8, 9])
Этот вызов создаст "упаковку" элементов из трёх списков:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
Таким образом, строки становятся столбцами.
Когда мы используем *matrix, это разупаковывает строки матрицы в отдельные аргументы для функции zip. Например:
*matrix -> [1, 2, 3], [4, 5, 6], [7, 8, 9]
Затем zip(*matrix) переворачивает строки в столбцы.
3. Преобразование результата
Функция zip возвращает объект-итератор, который содержит кортежи. Чтобы получить результат в формате, соответствующем входным данным (списки списков), мы применяем преобразование:
list(row)Здесь каждую строку, представленную в виде кортежа, мы преобразуем в список.
4. Возвращение результата
Результат создается как новый список списков, где каждая строка — это транспонированный столбец исходной матрицы.
Пример работы функции
Входная матрица:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
Распаковка матрицы:
*matrix -> [1, 2, 3], [4, 5, 6], [7, 8, 9]Применение
zip:zip([1, 2, 3], [4, 5, 6], [7, 8, 9]) -> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]Преобразование кортежей в списки:
[list(row) for row in zip(*matrix)] -> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Результат:
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]