ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Матрицы в Python: списки списков

Автор: · Обновлено

Матрицу школьного уровня удобно представить списком строк, где каждая строка — отдельный список. Доступ matrix[row][column] выполняется в два шага: сначала выбирается строка,…

Матрицу школьного уровня удобно представить списком строк, где каждая строка — отдельный список. Доступ matrix[row][column] выполняется в два шага: сначала выбирается строка, затем элемент внутри неё. Для прямоугольной таблицы длины строк должны совпадать.

Суммы по строкам

matrix = [
    [2, 4, 1],
    [3, 0, 5],
]

for row in matrix:
    print(sum(row))

print(matrix[1][2])

Ожидаемый вывод:

7
8
5

matrix[1] — вторая строка [3, 0, 5], а индекс 2 внутри неё указывает на 5.

Опасное создание одинаковых строк

Запись [[0] * columns] * rows создаёт несколько ссылок на один внутренний список. Изменение одной ячейки неожиданно появится во всех строках. Надёжный вариант: [[0 for _ in range(columns)] for _ in range(rows)]. Каждая итерация создаёт новый объект строки.

Перед обращением к matrix[0] обработайте пустую матрицу. Если строки разной длины, цикл по фиксированному range(columns) может получить IndexError. Для чтения из ввода проверяйте ожидаемое число элементов.

Максимум и координаты

Для матрицы [[1, 9, 2], [7, 3, 9]] найдите максимальное значение и координаты первого появления без flatten. Ожидаются 9, row 0, column 1. Проверьте матрицу 1 × 1 и отрицательные значения. Затем создайте таблицу нулей 2 × 3 правильным способом, измените одну ячейку и убедитесь, что остальные строки не изменились.

Проверка формы матрицы

Напишите функцию shape(matrix), возвращающую число строк и столбцов, но выбрасывающую ValueError для строк разной длины. Явно определите форму пустой матрицы. Затем реализуйте транспонирование прямоугольной таблицы через вложенные циклы и проверьте результат 2 × 3, а не только квадрат. Убедитесь, что двойное транспонирование возвращает исходные значения и что созданные строки независимы. Наконец, намеренно постройте таблицу через умножение вложенного списка и покажите ошибку общих ссылок. Проверяемые свойства делают структуру данных надёжнее визуального просмотра одной матрицы.

Практикум: форма матрицы и независимые строки

Создайте матрицу 2 × 3, вычислите сумму каждой строки и столбца, затем транспонируйте её в размер 3 × 2. Проверьте прямоугольный, а не только квадратный пример. Напишите функцию проверки одинаковой длины строк и определите форму пустой матрицы. Затем создайте таблицу через [[0] * 3] * 2, измените одну ячейку и объясните общий объект строки. Исправьте построение включением и убедитесь, что соседняя строка не меняется.

Контрольная точка

Какие границы нужны двум индексам для матрицы rows × columns? При транспонировании новая строка соответствует старому столбцу, поэтому размеры меняются местами.

Частые вопросы

Почему умножение списка безопасно для чисел, но опасно для вложенных списков?

Неизменяемые числовые значения можно повторять без наблюдаемого общего состояния. При повторении вложенного списка копируются ссылки на один изменяемый объект, поэтому изменение видно во всех строках.

Источники