- 2.4. Массивы¶
- 2.4.1. Общее представление о массиве¶
- 2.4.2. Обход массива¶
- Массивы в Python
- Пример
- Многомерный массив
- Обход массива с использованием цикла for
- Обход 2D-массива
- Добавление
- Определение размера
- Срез
- Вставка массива
- Функция pop
- Двумерные массивы в Python и методы работы с ними
- Создание двумерных массивов
- Способы ввода двумерных массивов
- Вывод двумерных массивов
- Обработка двумерных массивов
- Итог
2.4. Массивы¶
Часто в программах бывает надо работать с большим количество однотипных переменных. Например, пусть вам надо записать рост каждого человека в классе — это много целых чисел. Вы можете завести по одной переменной на каждого ученика, но это очень не удобно. Специально для этого придуманы массивы.
2.4.1. Общее представление о массиве¶
Массив — это переменная, в которой хранится много значений. (В питоне еще принято название «список», это то же самое, хотя в других языках программирования «список» и «массив» — это разные вещи.) Массив можно представлять себе в виде такой последовательности ячеек, в каждой из которых записано какое-то число:
Теперь переменная a хранит этот массив. К элементам массива можно обращаться тоже через квадратные скобки: a[2] — это элемент номер 2, т.е. в нашем случае это -3 . Аналогично, a[5] — это 0 . В квадратных скобках можно использовать любые арифметические выражения и даже другие переменные: a[2*2-1] — это 12 , a[i] обозначает «возьми элемент с номером, равным значению переменной i », аналогично a[2*i+1] обозначает «возьми элемент с номером, равным 2*i+1 », или даже a[a[4]] обозначает «возьми элемент с номером, равным четвертому элементу нашего массива» (в нашем примере a[4] — это 2 , поэтому a[a[4]] — это a[2] , т.е. -3 ).
Если указанный номер слишком большой (больше длины массива), то питон выдаст ошибку (т.е. в примере выше a[100] будет ошибкой, да и даже a[6] тоже). Если указан отрицательный номер, то тут действует хитрое правило. Отрицательные номера обозначают нумерацию массива с конца: a[-1] — это всегда последний элемент, a[-2] — предпоследний и т.д. В нашем примере a[-6] равно 7. Слишком большой отрицательный номер тоже дает ошибку (в нашем примере a[-7] уже ошибка).
С элементами массива можно работать как с привычными вам переменными. Можно им присваивать значения: a[3] = 10 , считывать с клавиатуры: a[3] = int(input()) , выводить на экран: print(a[3]) , использовать в выражениях: a[3+i*a[2]] = 3+abs(a[1]-a[0]*2+i) (здесь i — какая-то еще целочисленная переменная для примера), использовать в if’ах: if a[i]>a[i-2]: , или for a[2] in range(n) и т.д. Везде, где вы раньше использовали переменные, можно теперь использовать элемент массива.
2.4.2. Обход массива¶
Но обычно вам надо работать сразу со всеми элементами массива. Точнее, сразу со всеми как правило не надо, надо по очереди с каждым (говорят: «пробежаться по массиву»). Для этого вам очень полезная вещь — это цикл for . Если вы знаете, что в массиве n элементов (т.е. если у вас есть переменная n и в ней хранится число элементов в массиве), то это делается так:
for i in range(n): . что-то сделать с элементом a[i]
например, вывести все элементы массива на экран:
Массивы в Python
Массив в Python содержит последовательность данных. В программировании на Python нет эксклюзивного объекта массива, потому что мы можем выполнять все операции с массивом, используя список. Сегодня мы узнаем о массиве и различных операциях, которые мы можем выполнять с массивом (списком).
Python поддерживает все операции, связанные с массивами, через свой объект списка. Начнем с инициализации одномерного массива.
Пример
Элементы массива в Python определяются в скобках [] и разделяются запятыми. Ниже приведен пример объявления одномерного массива.
arr = [ 1, 2 ,3, 4, 5] print (arr) print (arr[2]) print (arr[4])
Результатом приведенного выше примера программы с одномерным массивом будет:
Индексация массива начинается с 0. Значит, значение индекса 2 переменной arr равно 3.
В некоторых других языках программирования, таких как Java, когда мы определяем массив, нам также необходимо определить тип элемента, поэтому мы ограничены хранением только этого типа данных в массиве. Например, int brr [5]; может хранить только целые данные.
Но python дает нам гибкость, позволяющую иметь разные типы данных в одном массиве. Посмотрим на пример.
student_marks = ['Akkas' , 45, 36.5] marks = student_marks[1]+student_marks[2] print(student_marks[0] + ' has got in total = %d + %f = %f ' % (student_marks[1], student_marks[2], marks ))
Это дает следующий результат:
Akkas has got in total = 45 + 36.500000 = 81.500000 marks
В приведенном выше примере вы можете видеть, что массив student_marks имеет три типа данных – строку, int и float.
Многомерный массив
Двухмерный массив в Python можно объявить следующим образом.
arr2d = [ [1,3,5] ,[2,4,6] ] print(arr2d[0]) # prints elements of row 0 print(arr2d[1]) # prints elements of row 1 print(arr2d[1][1]) # prints element of row = 1, column = 1
Он выдаст следующий результат:
Точно так же мы можем определить трехмерный массив или многомерный массив в python.
Теперь, когда мы знаем, как определять и инициализировать массив в python. Мы рассмотрим различные операции, которые мы можем выполнять с массивом.
Обход массива с использованием цикла for
Мы можем использовать цикл for для обхода элементов массива. Ниже приведен простой пример цикла for для обхода массива.
arrayElement = ["One", 2, 'Three' ] for i in range(len(arrayElement)): print(arrayElement[i])
На изображении ниже показан результат работы приведенного выше примера программы для работы с массивами.
Обход 2D-массива
Следующий код выводит элементы построчно, а следующая часть печатает каждый элемент данного массива.
arrayElement2D = [ ["Four", 5, 'Six' ] , [ 'Good', 'Food' , 'Wood'] ] for i in range(len(arrayElement2D)): print(arrayElement2D[i]) for i in range(len(arrayElement2D)): for j in range(len(arrayElement2D[i])): print(arrayElement2D[i][j])
Добавление
arrayElement = ["One", 2, 'Three' ] arrayElement.append('Four') arrayElement.append('Five') for i in range(len(arrayElement)): print(arrayElement[i])
Новые элементы Four и Five будут добавлены в конец массива.
Вы также можете добавить массив к другому массиву. В следующем коде показано, как это можно сделать.
arrayElement = ["One", 2, 'Three' ] newArray = [ 'Four' , 'Five'] arrayElement.append(newArray); print(arrayElement)
Теперь наш одномерный массив arrayElement превращается в многомерный массив.
Определение размера
Мы можем использовать функцию len для определения размера массива. Давайте посмотрим на простой пример длины массива Python.
arr = ["One", 2, 'Three' ] arr2d = [[1,2],[1,2,3,4]] print(len(arr)) print(len(arr2d)) print(len(arr2d[0])) print(len(arr2d[1]))
Срез
Python предоставляет особый способ создания массива из другого массива с использованием нотации срезов. Давайте посмотрим на несколько примеров срезов массива.
arr = [1,2,3,4,5,6,7] #python array slice arr1 = arr[0:3] #start to index 2 print(arr1) arr1 = arr[2:] #index 2 to end of arr print(arr1) arr1 = arr[:3] #start to index 2 print(arr1) arr1 = arr[:] #copy of whole arr print(arr1) arr1 = arr[1:6:2] # from index 1 to index 5 with step 2 print(arr1)
На изображении ниже показан пример вывода программы фрагмента массива Python.
Вставка массива
Мы можем вставить элемент в массив с помощью функции insert().
arr = [1,2,3,4,5,6,7] arr.insert(3,10) print(arr)
Функция pop
Мы можем вызвать функцию pop для массива, чтобы удалить элемент из массива по указанному индексу.
arr = [1,2,3,4,5,6,7] arr.insert(3,10) print(arr) arr.pop(3) print(arr)
Двумерные массивы в Python и методы работы с ними
Иногда нам приходится использовать таблицы с данными для решения своих задач. Такие таблицы называются матрицами или двумерными массивами.
В Python подобные таблицы можно представить в виде списка, элементы которого являются другими списками. Для примера создадим таблицу с тремя столбцами и тремя строками, заполненными произвольными буквами:
mas = [['й', 'ц', 'у'], ['к','е','н'], ['г', 'ш', 'щ']] #Вывод всего двумерного массива print(mas) #Вывод первого элемента в первой строке print(mas[0][0]) # Выведет й #Вывод третьего элемента в третьей строке print(mas[2][2]) # Выведет щ
Создание двумерных массивов
Создать такой массив в Python можно разными способами. Разберем первый:
# Создание таблицы с размером 3x3, заполненной нулями a = 3 mas = [0] * a for i in range(a): mas[i] = [0] * a print(mas) # Выведет [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Второй способ предполагает создание пустого списка с добавлением в него новых списков. Рассмотрим на примере:
# Создание таблицы с размером 2x2, заполненной единицами
a = 2 mas = [] for i in range(a): mas.append([0] * a) print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Третьим и самым простым способом является генератор списков с x строками, которые будут состоять из y элементов. Пример:
# Создание таблицы с размером 3x3, заполненной двойками a = 3 mas = [[2] * a for i in range(a)] print(mas) # Выведет [[2, 2, 2], [2, 2, 2], [2, 2, 2]]
Способы ввода двумерных массивов
Допустим, нам нужно ввести двумерный массив после запуска нашей программы. Для этого мы можем создать программу, которая будет построчно считывать значения нашего массива, а также количество строк в нем. Рассмотрим на примере:
a=int(input()) mas = [] for i in range(a): mas.append(list(map(int, input().split()))) print(mas)
Запускаем программу и сначала вводим количество строк в массиве (допустим, 3). Далее вводим строки в порядке их очереди. Например:
После этого данная программа выведет наш двумерный массив: [[1, 1, 1], [1, 1, 1], [1, 1, 1]].
То же самое можно сделать с помощью генератора двумерных массивов:
mas = [list(map(int, input().split())) for i in range(int(input()))] # Вводим 3 1 1 1 1 1 1 1 1 1 print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Вывод двумерных массивов
Для обработки и вывода списков используются два вложенных цикла. Первый цикл – по порядковому номеру строки, второй – по ее элементам. Например, вывести массив можно так:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in range(0, len(mas)): for i2 in range(0, len(mas[i])): print(mas[i][i2], end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1
То же самое можно сделать не по индексам, а по значениям массива:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: for i2 in i: print(i2, end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1
Способ с использованием метода join():
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: print(' '.join(list(map(str, i)))) # Выведет 1 1 1 1 1 1 1 1 1
Вывод одной из строк двумерного массива можно осуществить с помощью цикла и того же метода join(). Для примера выведем вторую строку в произвольном двумерном массиве:
mas = [[1, 1, 1], [2, 2, 2], [3, 3, 3]] string = 2 for i in mas[string-1]: print(i, end=' ') # Выведет 1 1 1
Для вывода определенного столбца в двумерном массиве можно использовать такую программу:
mas = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] column = 2 for i in mas: print(i[column-1], end=' ') # Выведет 2 5 8
Обработка двумерных массивов
Составим произвольный двумерный массив с числами и размерностью 4×4:
2 4 7 3 4 5 6 9 1 0 4 2 7 8 4 7
Теперь поставим числа в каждой строке по порядку:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: mas2.append(sorted(i)) print(mas2) # Выведет [[2, 3, 4, 7], [4, 5, 6, 9], [0, 1, 2, 4], [4, 7, 7, 8]]
А теперь расставим все числа по порядку, вне зависимости от их нахождения в определенной строке:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: for i2 in i: mas2.append(i2) mas=sorted(mas2) for x in range(0, len(mas), 4): e_c = mas[x : 4 + x] if len(e_c) < 4: e_c = e_c + [None for y in range(n - len(e_c))] print(list(e_c)) # Выведет [0, 1, 2, 2] [3, 4, 4, 4] [4, 5, 6, 7] [7, 7, 8, 9]
Итог
Мы разобрались в основах двумерных массивов в Python, научились создавать, вводить и выводить их, а также рассмотрели примеры обработки. Надеюсь, статья оказалась полезной для вас!