Л_работа_8_Двумерные списки. Лабораторная работа 7. Двумерные списки в питоне
Скачать 0.57 Mb.
|
ЛАБОРАТОРНАЯ РАБОТА №7. ДВУМЕРНЫЕ СПИСКИ В ПИТОНЕ1. Обработка и вывод вложенных списковВ языке программирования Питон таблицу можно представить в виде списка строк, каждый элемент которого является в свою очередь списком чисел.Приведем программу, в которой создается числовая таблица из двух строк и трех столбцов, с которой производятся различные действия.a = [[1, 2, 3], [4, 5, 6]]print(a[0])print(a[1])b = a[0]print(b)print(a[0][2])a[0][1] = 7print(a)print(b)b[2] = 9print(a[0])print(b)Здесь первая строка списка a[0] является списком из чисел [1, 2, 3] .То есть a[0] [0] == 1 , значение a[0][1] == 2 , a[0][2] == 3 ,a[1][0] == 4 , a[1][1] == 5 , a[1][2] == 6 .Для обработки и вывода списка используют два вложенных цикла.Первый цикл перебирает номер строки, второй цикл бежит по элементам внутри строки. Например, вывести двумерный числовой список на экран построчно, разделяя числа пробелами внутри одной строки, можно так:Подсчет суммы всех чисел в списке:Или то же самое с циклом не по индексу, а по значениям строк:2. Создание вложенных списковПервый способ: сначала создадим список из n элементов (для начала просто из n нулей). Затем сделаем каждый элемент списка ссылкой на другой одномерный список из m элементов:n = 3m = 4a = [0] * nfor i in range(n):a[i] = [0] * mВторой способ: создать пустой список, потом n раз добавить в него новый элемент, являющийся списком-строкой:n = 3m = 4a = []for i in range(n):a.append([0] * m)Третий способ: создать список из n элементов, каждый из которых будет списком, состоящих из m нулей:n = 3m = 4a = [[0] * m for i in range(n)]В этом случае каждый элемент создается независимо от остальных (заново конструируется список [0] * m для заполнения очередного элемента списка), а не копируются ссылки на один и тот же список.3. Ввод двумерного массиваПусть программа получает на вход двумерный массив в виде n строк, каждая из которых содержит m чисел, разделенных пробелами.Первый способ:# в первой строке ввода - количество строк массиваn = int(input())a = []for i in range(n):a.append([int(j) for j in input().split()])Второй способ:n = int(input())a = []for i in range(n):row = input().split()for i in range(len(row)):row[i] = int(row[i])a.append(row)Третий способ:n = int(input())a = [[int(j) for j in input().split()] for i in range(n)]Для инициализации элементов матрицы случайными числами используется алгоритм:import random for i in range(N): for j in range(M): a[i][j] = random.randint ( 30, 60 ) print ( "{:4d}".format(a[i][j]), end = "" ) print()4. Пример обработки двумерного массиваПусть дан квадратный массив из n строк и n столбцов. Необходимо элементам, находящимся на главной диагонали присвоить значение 1 , элементам, находящимся выше главной диагонали – значение 0, элементам, находящимся ниже главной диагонали – значение 2.То есть необходимо получить такой массив (пример для n==4 ):1 0 0 02 1 0 02 2 1 02 2 2 1Первый способ:Элементы выше главной диагонали – это элементы a[i][j] , для которых i а для элементов ниже главной диагонали i>j .Данный алгоритм выполняет одну или две инструкции if для обработки каждого элемента.Второй способ:Сначала заполним главную диагональ, для чего нам понадобится один циклfor i in range(n):a[i][i] = 1Затем заполним значением 0 все элементы выше главной диагонали, для чего нам понадобится в каждой из строк с номером i присвоить значение элементам a[i][j] для j = i+1 , ..., n-1 . Здесь нам понадобятся вложенные циклыfor i in range(n):for j in range(i + 1, n):a[i][j] = 0Аналогично присваиваем значение 2 элементам a[i][j] для j = 0 , ..., i-1 :for i in range(n):for j in range(0, i):a[i][j] = 2Третий способ:5. Вложенные генераторы двумерных массивовДля создания двумерных массивов можно использовать вложенные генераторы, разместив генератор списка, являющегося строкой, внутри генератора всех строк.Напомним, что сделать список из n строк и m столбцов можно при помощи генератора, создающего список из n элементов, каждый элемент которого является списком из m нулей: [[0] * m for i in range(n)]Но при этом внутренний список также можно создать при помощи, например, такого генератора:[0 for j in range(m)] .Вложив один генератор в другой, получим вложенные генераторы:[[0 for j in range(m)] for i in range(n)]Например, пусть нужно задать следующий массив:0 0 0 0 0 00 1 2 3 4 50 2 4 6 8 100 3 6 9 12 150 4 8 12 16 20В этом массиве n = 5 строк, m = 6 столбцов, и элемент в строке i и столбце j вычисляется по формуле: a[i][j] = i * j .Для создания такого массива можно использовать генератор:[[i * j for j in range(m)] for i in range(n)]Упражнение 1. Написать программу поиска минимального и максимального элементов матрицы и их индексов. Упражнение 2. Написать программу, выводящую на экран строку двумерного списка, сумма элементов которой максимальна. Упражнение 3. Введите с клавиатуры двумерный список целых чисел размером N*N и вычислите сумму элементов каждого столбца. Упражнение 4. Дан целочисленный массив размером N*N. Найти наименьший элемент массива и сообщить его расположение относительно правой диагонали. Упражнение 5. Найти минимальный элемент среди максимальных элементов столбцов двумерного массива целых чисел. Определить номер строки и столбца такого элемента. |