Питон двумерный массив задачи

Введение в программирование на языке Python. 10 Модуль. Теория. Двумерные массивы.

Часто в задачах приходится хранить прямоугольные таблицы с данными. Такие таблицы называются матрицами или двумерными массивами. В языке программирования Python таблицу можно представить в виде списка, каждый элемент которого тоже является списком, например, списком чисел.

Если требуется создать числовую таблицу из двух строк и трёх столбцов, то это можно сделать следующим образом: a = [[ 2 , 3 , 4 ] , [ 5 , 6 , 7 ]] .

Здесь первый элемент списка a [ 0 ] является списком из чисел [ 2 , 3 , 4 ] . То есть a [ 0 ][ 0 ] равно 2, a [ 0 ][ 1 ] равно 3, a [ 0 ][ 2 ] равно 4. Таким образом, чтобы обратиться к элементу, расположенному в i -й строке и j -м столбце, то надо написать a [ i ][ j ] . Также можно использовать отрицательные индексы, например, элемент a [ — 1 ][ — 1 ] нашей таблицы — это элемент из последней строки и последнего столбца, и он равен числу 7 .

Обработка и вывод списка

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

for i in range ( len ( a )) :

for j in range ( len ( a [ i ])) :

print ( a [ i ][ j ] , end = ‘ ‘ )

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

Можно перебирать элементы списка не по индексу, а по значению. Тогда код вывода двумерного массива будет иметь вот такой вид:

for elem in row:

Кроме того, для вывода одной строки можно воспользоваться методом join :

print ( ‘ ‘ . join( list ( map ( str , row ))))

Наконец, можно использовать и упрощенный способ вывода списков:

for i in range ( len ( a )) :

Используем два вложенных цикла для подсчета суммы всех чисел в таблице и нахождения минимального элемента в таблице:

for i in range ( len ( a )) :

for j in range ( len ( a [ i ])) :

Для решения этой задачи можно использовать циклы не по индексам, а по элементам:

for elem in row:

Заметим, что если мы хотим параллельно изменять значения элементов в нашей таблице, то придётся использовать первый вариант. Действительно, переменная elem является дополнительной переменной, и если мы ее меняем, то элемент таблицы при этом не меняется. Таким образом, если мы хотим не только найти сумму чисел и минимум исходной таблицы, но и увеличить все элементы таблицы на 1, то для этого надо использовать первый вариант, и код будет выглядеть следующим образом:

for i in range ( len ( a )) :

for j in range ( len ( a [ i ])) :

Создание вложенных списков

Копирование списков

Научимся копировать списки в языке Python. Пусть у нас есть список a = [ 2 , 3 , 4 ] . Оказывается, что операция b = a не создаёт новый список. Такая операция делает имя b ссылкой на тот же список, на который ссылается имя a . Таким образом, a и b — это два разных имени, ссылающиеся на один список. Поэтому если мы модифицируем список a , например, добавив число 5 в конец списка: a. append( 5 ) , то модифицируется и список b .

Нам же нужно выполнить такую операцию, чтобы имя b ссылалось на список, который является копией списка a , а не на сам список a . Для этого можно использовать присваивание с использованием среза: b = a [ : ] . Также можно использовать генератор: b = [ elem for elem in a ] .

Если есть необходимость создать копию двумерного списка, то возникают дополнительные сложности. Чтобы их избежать, рекомендуется выполнять копирование с использованием специальных функций из модуля copy . Подключить модуль copy можно, написав from copy import * в начале программы.

Создание двумерных списков

Пусть теперь нам нужно создать двумерный список из 3 строк и 4 столбцов, заполненный нулями. Кажется, что такой двумерный список можно создать следующим образом: a = [[ 0 ] * 4 ] * 3 . Но тут возникает проблема. При таком способе a [ 0 ] , a [ 1 ] и a [ 2 ] являются ссылками на один и тот же список [ 0 ] * 4 . Поэтому после операции a [ 0 ][ 0 ] = 1 , окажется, что элементы a [ 1 ][ 0 ] и a [ 2 ][ 0 ] тоже стали равны числу 1 .

Чтобы правильно создать двумерный список, заполненный нулями и состоящий из n строк и m столбцов, необходимо, чтобы каждая строка списка создавалась заново. Есть несколько способов сделать это.

Например, можно создать список из n нулей, а затем каждый элемент этого списка заменить на список из m нулей. Во время замены список из m нулей будет создаваться заново, поэтому каждая из n строк окажется ссылкой на свой независимый список из m нулей:

for i in range(n):

Можно создать изначально пустой список, а потом n раз добавить в конец этого списка новый элемент, который является списком из m нулей:

for i in range(n):

Также для создания двумерного списка можно использовать генератор, который создает список из n элементов, каждый из которых будет списком, состоящим из m нулей (подробнее о генераторах списков будет рассказано в следующем модуле):

a = [[0] * m for i in range(n)]

В каждом из этих трёх способов очередная строка создается независимо от остальных: заново конструируется список [ 0 ] * m , а не копируются ссылки на один и тот же список.

Снежинка

Дано нечётное число n . Создайте двумерный массив из n × n элементов, заполнив его символами «.» (каждый элемент массива является строкой из одного символа). Затем заполните символами » ∗ » среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. Для этого не нужно использовать вложенные циклы.

В результате символы «звёздочка» в массиве должны образовывать изображение снежинки. Выведите полученный массив на экран, разделяя элементы массива пробелами.

Входные данные

В одной строчке задано число n ≤ 21 .

Выходные данные

Ходы коня

На шахматной доске стоит конь. Отметьте положение коня на доске и все клетки, которые он бьет. Клетку, где стоит конь, отметьте английской буквой “K”. Клетки, которые он бьёт, отметьте символами “*”. Остальные клетки заполните точками.

Входные данные

Программа получает на вход два числа — координаты коня на шахматной доске. Координаты вводятся на одной строке через пробел. Первое число обозначает номер строки, а второе — номер столбца. Все числа принимают значения от 1 до 8 .

Выходные данные

Выведите на экран изображение доски так, как это показано в примере. Обратите внимание, что символы в одной строке разделены пробелом.

Считывание двумерных массивов

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

Обычно в задачах нам сначала дают два числа n и m — размеры массива, а затем дают n строк, в каждой из которых записаны по m чисел, разделённых пробелами. Пример входных данных:

Сначала считаем два числа n и m , задающие размеры двумерного массива. После этого создадим пустой список a и повторим n раз следующую последовательность действий: считаем очередную строку из чисел, превратим строку в список из m чисел, разбив её по пробелам и преобразовав элементы к типу int , добавим полученный список в конец списка a .

for i in range(n):
 a.append(list(map(int, input().split())))

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

Можно организовать считывание при помощи генератора следующим образом:

a = [list(map(int, input().split())) for i in range(n)]

Поменять столбцы

Дан двумерный массив и два числа: i и j . Поменяйте в массиве столбцы с номерами i и j .

Входные данные

Программа получает на вход в первой строке размеры массива n≤100 и m≤100 , затем элементы массива, а в последней строке числа i и j .

Выходные данные

Выведите полученный массив.

Симметричен ли массив?

Дано число n и массив размером n × n. Проверьте, является ли этот массив симметричным относительно главной диагонали. Выведите слово “ YES “ , если массив симметричный, и слово “ NO ” в противном случае.

Входные данные

В первой строке дано значение n ≤ 10 . Далее идут n строк по n чисел — элементы матрицы.

Выходные данные

Максимум

Найдите индексы первого вхождения максимального элемента в двумерном массиве.

Входные данные

Программа получает на вход размеры массива n≤10 и m≤10 , затем n строк по m целых чисел, не превосходящих по модулю 231 .

Выходные данные

Выведите два числа: номер строки и номер столбца, в которых стоит наибольший элемент в двумерном массиве. Если таких элементов несколько, то выводится тот, у которого меньше номер строки, а если номера строк равны, то тот, у которого меньше номер столбца.

Поменять местами две диагонали

Дан квадратный массив. Поменяйте местами в каждом столбце элементы, стоящие на главной и побочной диагонали.

Входные данные

В первой строке дано число n ≤ 10 . Далее идут n строк по n неотрицательных целых чисел не больше 100 .

Выходные данные

Транспонировать квадратную матрицу

Дан двумерный массив размером n × n . Транспонируйте его и результат запишите в этот же массив. Вспомогательный массив использовать нельзя.

Входные данные

На первой строке входных данных задано натуральное число n ≤ 500 . В следующих n строках задано по n натуральных чисел — элементы массива.

Выходные данные

Источник

Python Урок 8. Матрицы (двумерный массив)

егэ разбор егэ разбор pascal уроки c уроки python уроки c++ уроки vb уроки lazarus уроки php уроки html уроки css уроки javascript уроки jquery и ajax уроки prolog уроки flash уроки

Для работы с матрицами в Python также используются списки. Каждый элемент списка-матрицы содержит вложенный список.

Рассмотрим пример матрицы размера 4 х 3:

matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]

matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]

Данный оператор можно записать в одну строку:

matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]

matrix = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1], [1, 1, -1]]

вывод матрицы

def printMatrix ( matrix ): for i in range ( len(matrix) ): for j in range ( len(matrix[i]) ): print ( "".format(matrix[i][j]), end = "" ) print ()

def printMatrix ( matrix ): for i in range ( len(matrix) ): for j in range ( len(matrix[i]) ): print ( «».format(matrix[i][j]), end = «» ) print ()

В примере i – это номер строки, а j – номер столбца;
len(matrix) – число строк в матрице.

def printMatrix ( matrix ): for row in matrix: for x in row: print ( "".format(x), end = "" ) print ()

def printMatrix ( matrix ): for row in matrix: for x in row: print ( «».format(x), end = «» ) print ()

from random import randint n, m = 3, 3 a = [[randint(1, 10) for j in range(m)] for i in range(n)] print(a)

from random import randint n, m = 3, 3 a = [[randint(1, 10) for j in range(m)] for i in range(n)] print(a)

Обработка элементов двумерного массива

Нумерация элементов двумерного массива, как и элементов одномерного массива, начинается с нуля.
Т.е. matrix[2][3] — это элемент третьей строки четвертого столбца.

p = 1 for i in range(N): for j in range(M): p *= matrix[i][j] print (p)

p = 1 for i in range(N): for j in range(M): p *= matrix[i][j] print (p)

s = 0 for row in matrix: s += sum(row) print (s)

s = 0 for row in matrix: s += sum(row) print (s)

Для поиска суммы существует стандартная функция sum.

Задание Python 8_0:
Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:

Номер станции 1-й день 2-й день 3-й день 4-й день
1 -8 -14 -19 -18
2 25 28 26 20
3 11 18 20 25

Т.е. запись показаний в двумерном массиве выглядела бы так:

  1. Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
  2. Распечатать показания термометров всех метеостанций за 2-й день.
  3. Определить среднюю температуру на 3-й метеостанции.
  4. Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.

Задание Python 8_1:
Написать программу поиска минимального и максимального элементов матрицы и их индексов.

Задание Python 8_2:
Написать программу, выводящую на экран строку матрицы, сумма элементов которой максимальна.

for i in range(N): # работаем с matrix[i][i]

for i in range(N): # работаем с matrix[i][i]

for i in range(N): # работаем с matrix[i][N-1-i]

for i in range(N): # работаем с matrix[i][N-1-i]

for i in range(N): c = A[i][2] A[i][2] = A[i][4] A[i][4] = c

for i in range(N): c = A[i][2] A[i][2] = A[i][4] A[i][4] = c

for i in range(N): A[i][2], A[i][4] = A[i][4], A[i][2]

for i in range(N): A[i][2], A[i][4] = A[i][4], A[i][2]

Задание Python 8_3:
Составить программу, позволяющую с помощью датчика случайных чисел сформировать матрицу размерностью N. Определить:

Источник

Читайте также:  Find python найти все
Оцените статью