Разбор задачи: Транспонированная матрица

Предложенный нами код решения:

 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]
]
  1. Распаковка матрицы:

    *matrix -> [1, 2, 3], [4, 5, 6], [7, 8, 9]
    
  2. Применение zip:

    zip([1, 2, 3], [4, 5, 6], [7, 8, 9]) -> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    
  3. Преобразование кортежей в списки:

    [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]]

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии