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

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

Задача «Ввод и вывод массива с использованием list comprehension»

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

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib
Вы разрабатываете программу для учета оценок студентов. Вам необходимо создать двумерный массив, где каждый внутренний список будет содержать оценки одного студента, введенные с клавиатуры. После ввода программе необходимо вывести все оценки в формате, удобном для последующей обработки.
 
Пример:
Input:
            85
           90
           75
           80 Output:             Студент 1: [85, 90]
Студент 2: [75, 80]
 
Подсказка:
Циклы в цикле, или вложенные циклы, позволяют итерировать по многомерным структурам данных и выполнять повторяющиеся задачи. Вложенные циклы работают следующим образом: внешний цикл выполняет одну итерацию, после чего внутренний цикл выполняет все свои итерации. Затем внешний цикл переходит к следующей итерации и снова запускает внутренний цикл. Этот процесс повторяется, пока внешний цикл не завершит все свои итерации. Основные принципы работы вложенных циклов:
Внешний цикл запускается, выполняя свою первую итерацию.
Внутренний цикл выполняет полный набор своих итераций.
Внешний цикл выполняет свою следующую итерацию, после чего внутренний цикл снова выполняет полный набор итераций.
Этот процесс повторяется, пока внешний цикл не завершит все итерации.
 
Пример работы вложенных циклов
Рассмотрим простой пример, чтобы понять, как это работает на практике. Предположим, у нас есть двумерный массив (список списков), и мы хотим перебрать все его элементы.
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

for i in range(len(matrix)):        # Внешний цикл по строкам
    for j in range(len(matrix[i])): # Внутренний цикл по элементам строки
        print(matrix[i][j], end=' ')
    print()  # Переход на новую строку после вывода всех элементов текущей строки
 
Разбор по шагам
 
Инициализация внешнего цикла:
i начинает с 0.
Внешний цикл запускается и выполняет одну итерацию.
 
Инициализация внутреннего цикла:
j начинает с 0.
Внутренний цикл выполняет полный набор итераций, перебирая все элементы строки с индексом 0 (первую строку).
 
Вывод элементов первой строки:
Внутренний цикл выводит элементы 1, 2, 3.
После завершения всех итераций внутреннего цикла, внешний цикл переходит к следующей итерации.
 
Внешний цикл выполняет следующую итерацию:
i становится 1.
Внешний цикл снова запускает внутренний цикл, который теперь перебирает элементы строки с индексом 1 (вторую строку).
 
Вывод элементов второй строки:
Внутренний цикл выводит элементы 4, 5, 6.
После завершения всех итераций внутреннего цикла, внешний цикл переходит к следующей итерации.
 
Двумерные массивы
В Python двумерные массивы можно представлять в виде списков списков, где каждый вложенный список представляет строку (или ряд) массива. Рассмотрим различные способы ввода двумерных массивов, начиная с ручного ввода и заканчивая использованием библиотек.
 
1. Ручной ввод
Рассмотрим, как создать двумерный массив вручную:
# Пример двумерного массива 3x3
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]
# Вывод массива
for row in matrix:
    print(row)
# Вывод: [1, 2, 3]
# Вывод: [4, 5, 6]
# Вывод: [7, 8, 9]
 
2. Ввод массива через циклы
Если размер массива известен, можно использовать циклы для ввода значений:
# Ввод размеров массива
rows = 3
cols = 3
# Создание пустого массива
matrix = []
# Ввод значений массива
for i in range(rows):
    row = []
    for j in range(cols):
        value = int(input(f"Введите элемент [{i}][{j}]: "))
        row.append(value)
    matrix.append(row)
 
3. Ввод массива с использованием list comprehension
Список списков можно создать с помощью list comprehension для более компактного кода:
# Ввод размеров массива
rows = 3
cols = 3

# Ввод значений массива с использованием list comprehension
matrix = [
    [int(input()) for j in range(cols)]
    for i in range(rows)
]
 
4. Ввод массива из строки
Можно вводить массив в виде строки, а затем преобразовывать её в двумерный массив:
# Ввод строки
input_string = "1 2 3 4 5 6 7 8 9"
# Преобразование строки в двумерный массив
values = list(map(int, input_string.split()))
rows, cols = 3, 3
matrix = [values[i*cols:(i+1)*cols] for i in range(rows)]
 
Пример работы с двумерным массивом:
У нас есть два двумерных массива размером 2x2:
Нужно создать третий массив такого же размера, в котором каждый элемент будет наибольшим из элементов на соответствующих позициях в matrix1 и matrix2.
# Исходные массивы
matrix1 = [
    [1, 2],
    [3, 4]]
matrix2 = [
    [4, 3],
    [2, 1]]
# Инициализация результирующего массива размером 2x2 нулями
result_matrix = [[0 for _ in range(2)] for _ in range(2)]
# Заполнение результирующего массива наибольшими элементами
for i in range(2):
    for j in range(2):
        result_matrix[i][j] = max(matrix1[i][j], matrix2[i][j])
# Результирующий массив:         
# [4, 3]
# [3, 4]

Вы уже дошли достаточно далеко и должны понимать, что в программировании знание определенных методов и функций может очень сильно облегчить жизнь. Сейчас будет еще 2 примера, как можно было решить это задание, итоговый результат у них один.
for i in range(2):
    for j in range(2):
        if matrix1[i][j] > matrix2[i][j]:
            result_matrix[i][j] = matrix1[i][j]
       else: 
            result_matrix[i][j] = matrix2[i][j]
for i in range(2):
    for j in range(2):
        result_matrix[i][j] = matrix1[i][j] if matrix1[i][j] > matrix2[i][j] else matrix2[i][j]
 
Пояснение
Инициализация результирующего массива: Создаем пустой массив result_matrix размером 2x2, заполненный нулями.       
Перебор элементов массива: Используем вложенные циклы for для перебора всех элементов в массивах matrix1 и matrix2.       
Сравнение элементов: Для каждой пары элементов на одинаковых позициях в matrix1 и matrix2 выбираем наибольший элемент с помощью функции max() и записываем его в соответствующую позицию в result_matrix.
 
Solution
Входные данные
Выходные данные

Тесты

2 3 6 1 1
2 3 6 1 1
2 3 6 1 1
2 3 6 1 1
2 3 6 1 1
2 3 6 1 1

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

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

AD

Реклама

red-snake blue-snake green-snake

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