• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 7. Двумерные массивы

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Перестановка фотографий»

Вы решили создать фотоальбом, но фотографии расположены в случайном порядке. Чтобы альбом выглядел лучше, вы хотите переставить фотографии так, чтобы они были отсортированы по размеру. Исходно фотографии расположены в альбоме в виде прямоугольной сетки: у каждой фотографии есть номер строки и номер столбца. Вам нужно создать программу, которая "перевернет" ваш фотоальбом: фотографии, которые изначально находились в строках, будут располагаться в столбцах, и наоборот.

Формат ввода

Сначала вводится два целых числа: N - количество строк и M - количество столбцов в вашем фотоальбоме. Затем вводится N строк, каждая из которых содержит M целых чисел, разделенных пробелами. Каждое число представляет собой размер фотографии, находящейся в соответствующей позиции

Формат Вывода

Выведите M строк, каждая из которых содержит N целых чисел, разделенных пробелами. Эти числа должны представлять собой размеры фотографий в перевернутом (транспонированном) фотоальбоме

Пример

Ввод

3 4
1 2 3 4
5 6 7 8
9 10 11 12

Вывод

1 5 9
2 6 10
3 7 11
4 8 12

Подсказка

Функция min

Функция min() — это ваш инструмент для быстрого поиска самого маленького элемента из нескольких значений или внутри коллекции.

Синтаксис

min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])
  • iterable: Итерируемый объект (например, список, кортеж, строка, множество).
  • arg1, arg2, *args: Один или несколько аргументов, переданных напрямую для сравнения.
  • key (опционально): Функция, которая применяется к каждому элементу перед сравнением. Поиск минимума будет вестись по результатам этой функции.
  • default (опционально): Значение, которое будет возвращено, если iterable окажется пустым. Если default не указан, попытка найти минимум в пустой коллекции вызовет ошибку ValueError.

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

  • С одним итерируемым объектом:

    numbers = [3, 1, 4, 1, 5, 9]
    print(min(numbers))  # Вывод: 1
    
  • С несколькими аргументами:

    print(min(3, 1, 4, 1, 5, 9))  # Вывод: 1
    
  • С параметром key: Поиск элемента по какому-либо его свойству.

    words = ["apple", "banana", "cherry"]
    # Находим слово с наименьшей длиной
    print(min(words, key=len))  # Вывод: 'apple'
    
  • С параметром default: Безопасная работа с потенциально пустыми коллекциями.

    empty_list = []
    print(min(empty_list, default="пусто"))  # Вывод: 'пусто'
    

Полезные советы и тонкости:

  • Сравнение разных типов: Нельзя сравнивать несравнимые типы данных, например, число и строку. min(5, "hello") вызовет ошибку TypeError.
  • Как работает key: Важно понимать, что key изменяет только значение для сравнения, но возвращает оригинальный элемент. В примере min(words, key=len) сравниваются длины (5, 6, 6), но возвращается само слово 'apple'.
  • Использование lambda-функций с key: Для сложных сравнений удобно использовать анонимные lambda-функции. Например, найти словарь с минимальным значением по ключу 'age':
    people = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 22}]
    print(min(people, key=lambda person: person['age']))  # Вывод: {'name': 'Jane', 'age': 22}
    
  • Сравнение строк: Строки сравниваются лексикографически (в алфавитном порядке). min("a", "b", "A") вернет 'A', так как заглавные буквы имеют меньший код в таблице символов.

Функция max()

Функция max() работает аналогично min(), но возвращает наибольший элемент из переданных аргументов или коллекции.

Синтаксис

max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])

Параметры (iterable, arg1, arg2, *args, key, default) имеют то же значение, что и в функции min().

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

  • С одним итерируемым объектом:

    numbers = [3, 1, 4, 1, 5, 9]
    print(max(numbers))  # Вывод: 9
    
  • С несколькими аргументами:

    print(max(3, 1, 4, 1, 5, 9))  # Вывод: 9
    
  • С параметром key:

    words = ["apple", "banana", "cherry"]
    # Находим слово с наибольшей длиной
    print(max(words, key=len))  # Вывод: 'banana'
    
  • С параметром default:

    empty_list = []
    print(max(empty_list, default='N/A'))  # Вывод: 'N/A'
    

Полезные советы и тонкости:

  • Все советы и тонкости, применимые к min(), также актуальны и для max(): избегайте смешивания типов, используйте lambda-функции для сложных ключей и помните про параметр default для пустых коллекций.
  • При наличии нескольких одинаковых максимальных/минимальных элементов возвращается первый из них. В примере max(words, key=len) слова "banana" и "cherry" имеют одинаковую длину 6, но max вернет первое встреченное — 'banana'.

Функция sum()

Функция sum() используется для нахождения суммы числовых элементов в итерируемом объекте.

Синтаксис

sum(iterable, start=0)
  • iterable: Итерируемый объект, содержащий числа (например, список, кортеж, множество).
  • start (опционально): Начальное значение, которое прибавляется к итоговой сумме. По умолчанию равно 0.

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

  • Сумма элементов списка/кортежа/множества:

    numbers_list = [1, 2, 3, 4, 5]
    print(sum(numbers_list))  # Вывод: 15
    
  • Использование параметра start:

    numbers = [1, 2, 3, 4, 5]
    # Начинаем суммирование не с 0, а с 10
    total = sum(numbers, 10)
    print(total)  # Вывод: 25 (10 + 1 + 2 + 3 + 4 + 5)
    

Применение к двумерным массивам (спискам списков)

sum() можно эффективно использовать для обработки матриц, но с одним важным нюансом.

  • Неправильный подход: sum(matrix) вызовет ошибку TypeError, так как Python попытается сложить начальное значение 0 со списком [1, 2, 3].
  • Правильный подход: Нужно сначала посчитать сумму каждой строки, а затем сложить эти суммы.
    # Двумерный массив
    matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
    
    # Сумма всех элементов массива с помощью генератора
    total_sum = sum(sum(row) for row in matrix)
    print(total_sum)  # Вывод: 45
    

Полезные советы и тонкости:

  • Только для чисел: sum() работает только с числовыми типами (int, float). Попытка суммировать список строк (sum(["a", "b"])) приведет к TypeError.
  • Суммирование True/False: True интерпретируется как 1, а False как 0. Это можно использовать для подсчета истинных значений в коллекции.
    bools = [True, False, True, True] # 1 + 0 + 1 + 1
    print(sum(bools)) # Вывод: 3
    
  • "Сплющивание" списка списков: Параметр start можно хитро использовать для объединения списков, хотя это менее читаемо и эффективно, чем другие методы.
    list_of_lists = [[1, 2], [3, 4], [5]]
    flat_list = sum(list_of_lists, [])
    print(flat_list) # Вывод: [1, 2, 3, 4, 5]
    
    Предупреждение: Этот способ не рекомендуется для больших списков из-за низкой производительности.
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!