Как создать двумерный массив в python
Перейти к содержимому

Как создать двумерный массив в python

  • автор:

Как создать двумерный массив?

Как создать двумерный массив из ‘*’ , чтобы можно было обратиться к определённому элементу из строки и столбца этого массива.

board = ['*','*','*','*',] def draw_board(board): print('-' * 21) for i in range(4): print("|", board[0], "|", board[0], "|", board[0], "|", board[0], "|", board[0], "|") print("-" * 21) draw_board(board) 

Сделал какую-то фигню и теперь не понимаю как обращаться к элементам.

Отслеживать

задан 1 окт 2020 в 5:36

27 3 3 бронзовых знака

с этой «фигней» — никак. потому что у вас нет двумерного массива как такового.

1 окт 2020 в 5:46

Тогда как его оформить?

1 окт 2020 в 5:54

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

dim = 5 # размерность массива (квадратная матрица) arr = [['*' for x in range(dim)] for y in range(dim)] # сам массив 

собственно, все. Если вам нужно нарисовать фигуру из этого массива, то вот так можно:

def draw_board(a: list): print("-"*(len(arr)*4+1)) for i in range(len(a)): print("|", end="") for j in range(len(a[0])): print(f" |", end="") #a[i][j] - это и есть обращение к элементу двумерного массива print("\n"+"-"*(len(arr)*4+1)) draw_board(arr) 

Отслеживать

ответ дан 1 окт 2020 в 5:59

25.7k 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков

Программирование в «Эврике»

Теперь мы можем присваивать каждому элементу списка A новое значение. Например, мы можем сделать элемент A[0] также равным списку:

A[0]=range[3]

Теперь A будет равно [[0, 1, 2], 1, 2, 3, 4] , то есть объект A[0] будет списком [0, 1, 2] . В свою очередь, мы можем обращаться к отдельным элементам списка A[0] : A[0][0]==0 , A[0][1]==1 , A[0][2]==2 .

На практике часто приходится иметь дело с прямоугольными таблицами данных, также называемых двумерными массивами. Их можно представлять в виде списка из n элементов (строк), каждый из которых является списком из m элементов (столбцов). Тогда к отдельному элементу двумерного массива A можн обращаться, как A[i][j] , где i является номером строки, 0

Итак, создадим массив A из n=3 строк и m=5 столбцов:

n=3 m=5 A=range(n) # A является списком из n строк for i in range(n): A[i]=range(m) # Каждая строка является списком из m элементов
Заполнение массива

Теперь заполним массив нулями. Для этого нам понадобится два вложенных цикла: внешний цикл по всем строкам, а внутренний – по всем столбцам.

for i in range(n): for j in range(m): A[i][j]=0

Если мы захотим записать в массив таблицу умножения, присвоив элементу A[i][j] значение i*j , последнюю строку в этом примере нужно записать в виде A[i][j]=i*j .

Вывод массива на экран

Конечно, можно вывести массив A на экран одной командой print A , но тогда все элементы будут выведены в одну строку:

[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]

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

A[0][0] A[0][1] A[0][2] A[0][3] A[0][4] A[1][0] A[1][1] A[1][2] A[1][3] A[1][4] A[2][0] A[2][1] A[2][2] A[2][3] A[2][4]

Для этого снова понадобятся два вложенных цикла. Один цикл по всем строкам, другой – по всем столбцам. В результате получаем:

for i in range(n): for j in range(m): print A[i][j], print

Обратите внимание на запятую, поставленную после инструкции print A[i][j] , необходимую для того, чтобы печать продолжалась на этой же строке. А вот инструкцию print без параметров для перехода на новую строку мы даем после завершения внутреннего цикла, то есть после вывода всей строки на экран. Вот что получится:

0 0 0 0 0 0 1 2 3 4 0 2 4 6 8
Считывание с клавиатуры

Теперь рассмотрим проблему считывания массива с клавиатуры в таком же виде. Проблема заключается в том, что функция input позволяет считать только одно значение, записанное в строке и выдаст ошибку при считывании набора чисел, разделенных пробелами. А функция raw_input сможет считать строку как единое целое вместе со всеми пробелами. Разбить строку на отдельные выражения, разделенные пробелами можно при помощи метода split() . Этот метод применяется к строке и возвращает список подстрок, состоящих из непробельных символов и разделенных пробелами. То есть если применить метод split к строке ‘1 2 3’ , то получится список из 3 строк: [‘1’, ‘2’, ‘3’] . Таким образом, мы можем разбить каждую входную строку на отдельные подстроки, а затем преобразовать эти подстроки к числовому виду при помощи функции int . В результате получаем следующий код (предполагается, что массив A из n строк и m столбцов уже создан):

for i in range(n): # Цикл по всем строкам s=raw_input() # Считали строку в переменную s s=s.split() # Разбили s на слова и записали их в виде списка for j in range(m): A[i][j]=int(s[j]) # Элементу A[i][j] присваиваем значение s[j]
Общий пример программы

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

# Считываем размеры массива s=raw_input() s=s.split() n=int(s[0]) m=int(s[1]) # Создаем массив A=range(n) for i in range(n): A[i]=range(m) # Считываем массив с клавиатуры for i in range(n): s=raw_input() s=s.split() for j in range(m): A[i][j]=int(s[j]) # Увеличиваем все элементы на 1 for i in range(n): for j in range(m): A[i][j]=A[i][j]+1 # Выводим массив на экран for i in range(n): for j in range(m): print A[i][j], print
Сложный пример обработки массива

Пусть дан квадратный массив из n строк и n столбцов. Необходимо элементам, находящимся на главной диагонали проходящей из левого верхнего угла в правый нижний (то есть тем элементам A[i][j] , для которых i==j ) присвоить значение 1 , элементам, находящимся выше главной диагонали – значение 0, элементам, находящимся ниже главной диагонали – значение 2. То есть получить такой массив (пример для n==4 ):

1 0 0 0 2 1 0 0 2 2 1 0 2 2 2 1

Рассмотрим несколько способов решения этой задачи. Элементы, которые лежат выше главной диагонали – это элементы A[i][j] , для которых ij . Таким образом, мы можем сравнивать значения i и j и по ним определять значение A[i][j] . Получаем следующий алгоритм:

for i in range(n): for j in range(n): if ij: A[i][j]=2 else: A[i][j]=1

Данный алгоритм плох, поскольку выполняет одну или две инструкции 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

Можно также внешние циклы объединить в один и получить еще одно, более компактное решение:

for i in range(n): for j in range(0,i): A[i][j]=2 A[i][i]=1 for j in range(i+1,n): A[i][j]=0
Форматирование чисел при выводе

Допустим, мы заполним массив таблицей умножения: A[i][j]=i*j как в примере в начале раздела. Если мы теперь попробуем вывести этот массив на экран, разделяя элементы в строке одним пробелом, то из-за того, что числа имеют различную длину столбцы таблицы окажутся неровными:

0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27

Для того, чтобы получить ровные столбцы необходимо, выводить числа так, чтобы одно выводимое число имело длину, например, ровно в 2 символа, а «лишние» позиции были бы заполнены пробелами.

0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27

Без лишних комментариев покажем, как в программе указать, что целое число x нужно выводить так, чтобы оно занимало ровно две позиции: print «%2d» % x . Здесь, естественно, можно заменить значение x на то значение, которое необходимо напечатать, а число 2 на любую другую ширину поля.

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

for i in range(n): for j in range(m): print «%2d» % A[i][j],

Д. П. Кириенко. Программирование на языке Python (школа 179 г. Москвы)

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

A = [ [1, 2, 3], [4, 5, 6] ]

Здесь первая строка списка 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 .

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

for i in range(len(A)): for j in range(len(A[i]): print(A[i][j], end = ' ') print()

То же самое, но циклы не по индексу, а по значениям списка:

for row in A: for elem in row: print(elem, end = ' ') print()

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

for row in A: print(' '.join(list(map(str, row))))

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

S = 0 for i in range(len(A)): for j in range(len(A[i])): S += A[i][j]

Или то же самое с циклом не по индексу, а по значениям строк:

S = 0 for row in A: for elem in row: S += elem

Двумерный массив в Python

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

Итак, Python выполняет все операции, связанные с массивами, с помощью объекта списка. Массив в Python представляет собой упорядоченный набор элементов в последовательном порядке.

Синтаксис объявления массива:

Двумерные массивы — это в основном массивы внутри массивов. Здесь позиция элемента данных доступна с помощью двух индексов. Он представлен в виде таблицы rows and columns элементов данных.

Объявление двумерного массива

array-name = [ [d1, d2, . dn], [e1, e2, . en] ]

array_input = [ [10,12,14] ,[0,1,2] ] print(array_input[0]) # printing elements of row 0 print(array_input[1]) # printing elements of row 1

вывод 2D массива

Вход в двумерный массив предоставляется в виде строк и столбцов.

size = int(input()) array_input = [] for x in range(size): array_input.append([int(y) for y in input().split()]) print(array_input)

ввод и вывод 2D массива

Insert

Элементы в 2D-массив могут быть вставлены с помощью функции insert() указывающей индекс и позицию вставляемого элемента.

from array import * input = [[1,1,1,1], [12,12,12,12]] print("Array before insertion of elements: ") print(input) input.insert(1, [1,3,5,7,9]) print("Array after insertion of elements: ") for x in input: for y in x: print(y,end = " ") print()

вставка в 2D массив

Как обновить элементы в двумерном массиве?

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

from array import * input = [[1,1,1,1], [12,12,12,12]] print("Array before Updation of elements: ") print(input) input[0] = [10,8] input[1][1] = 9 print("Array after updation of elements: ") for x in input: for y in x: print(y,end = " ") print()

обновление элементов

Как удалить значения?

Элементы из двумерного массива можно удалить с помощью метода del() .

from array import * input = [[1,1,1,1], [12,12,12,12], [0,2]] print("Array before Deletion of elements: ") print(input) del(input[1]) print("Array after Deletion of elements: ") for x in input: for y in x: print(y,end = " ") print()

del удаление

Размер или длина

Длину массива можно определить с помощью метода len() .

array_input = [[3,9],[0,3,7,10]] print(len(array_input))

Добавление

Элементы могут быть добавлены к массиву с помощью метода append() . Элемент добавляется в конец массива.

from array import * input = [[1,1,1,1], [12,12,12,12], [0,2]] print("Array before appending the elements: ") print(input) input.append([1,2]) print("Array after appending of the elements: ") for x in input: for y in x: print(y,end = " ") print()

добавление через append

Нарезка

Нарезка массива используется для доступа к нескольким значениям в массиве.

array1 = [[1,2,3],[4,5,6,7]] #python array slice array2 = array1[1:3] #index 1 to 2 print(array2) array2 = array1[:1] #index 0 to 1 print(array2)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *