Что такое массив?
Основное предназначение современных компьютеров – обработка большого количества данных. При этом надо как-то обращаться к каждой из тысяч (или даже миллионов) ячеек с данными. Очень сложно дать каждой ячейке собственное имя и при этом не запутаться. Из этой ситуации выходят так: дают имя не ячейке, а группе ячеек, в которой каждая ячейка имеет собственный номер. Такая область памяти называется массивом (или таблицей).
Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Каждая ячейка в массиве имеет уникальный номер.
Для работы с массивами нужно, в первую очередь, научиться: выделять память нужного размера под массив; записывать данные в нужную ячейку; читать данные из ячейки массива.
В языке Python нет такой структуры как «массив». Вместо этого для хранения группы однотипных объектов используют списки (тип данных list).
Список в Python – это набор элементов, каждый из которых имеет свой номер (индекс). Нумерация всегда начинается с нуля (как в Си-подобных языках), второй по счёту элемент имеет но-мер 1 и т.д. В отличие от обычных массивов в большинстве языков программирования список – это динамическая структура, его размер можно изменять во время выполнения программы (удалять и добавлять элементы), при этом все операции по управлению памятью берёт на себя транслятор.
Список можно создать перечислением элементов через запятую в квадратных скобках, на-пример, так:
A = [1, 3, 4, 23, 5]
Списки можно «складывать» с помощью знака «+», например, показанный выше список можно было построить так:
A = [1, 3] + [4, 23] + [5]
Сложение одинаковых списков заменяется умножением «* ». Вот так создаётся список из 10 эле-ментов, заполненный нулями:
A = [0]*10
В более сложных случаях используют генераторы списков – выражения, напоминающие цикл, с помощью которых заполняются элементы вновь созданного списка:
A =[ i for i in range(10) ]
Как вы знаете, цикл for i in range(10) перебирает все значения i от 0 до 9. Выражение перед словом for (в данном случае – i) – это то, что записывается в очередной элемент списка для каждого i. В приведённом примере список заполняется значениями, которые последовательно принимает переменная i, то есть получим такой список:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
То же самое можно получить, если использовать функцию list для того, чтобы создать список из данных, которые получаются с помощью функции range:
A = list (range(10))
Для заполнения списка квадратами этих чисел можно использовать такой генератор:
A =[ i*i for i in range(10)]
В конце записи генератора можно добавить условие отбора. В этом случае в список вклю-чаются лишь те из элементов, перебираемых в цикле, которые удовлетворяют этому условию. На-пример следующий генератор составляет список из всех простых чисел в диапазоне от 0 до 99:
A = [ i for i in range(100) if isPrime(i) ]
Здесь isPrime – логическая функция, которая определяет простоту числа (см. § 60.).
Часто в тестовых и учебных программах массив заполняют случайными числами. Это тоже
можно сделать с помощью генератора:
from random import randint
A = [ randint(20,100) for x in range(10)]
Здесь создается массив из 10 элементов и заполняется случайными числами из отрезка [20,100].
Для этого используется функция randint, которая импортируется из модуля random.
Длина списка (количество элементов в нём) определяется с помощью функции len:
N = len(A)
Ввод и вывод массива
Далее во всех примерах мы будем считать, что в программе создан список A, состоящий из N элементов(целых чисел).В этом списке хранится массив данных,поэтому под выражением«массив» мы будем подразумевать «однотипные данные, хранящиеся в виде списка». Перемен-ная i будет обозначать индекс элемента списка.
Чтобы ввести значения элементов массива с клавиатуры, нужно использовать цикл:
for i in range(N):
print ("A[", i, "]=", sep = "", end = "")
A[i] = int(input())
В этом примере перед вводом очередного элемента массива на экран выводится подсказка. На-пример, при вводе 3-го элемента будет выведено «A[3]= ».
Если никакие подсказки нам не нужны, создать массив из N элементов и ввести их значения можно с помощью генератора списка:
A = [ int(input()) for i in range(N) ]
Здесь на каждом шаге цикла строка, введённая пользователем, преобразуется в целое число с помощью функции int, и это число добавляется к массиву.
Возможен еще один вариант ввода, когда весь массив вводится в одной строке. В этом случае строку, полученную от функции input, нужно «расщепить» на части с помощью метода
split:
data = input()
s = data.split()
или сразу
s = input().split()
Например, если ввести строку "1 2 3 4 5", то после «расщепления» мы получим список
['1', '2', '3', '4', '5']
Это список символьных строк. Для того, чтобы построить массив (список), состоящий из целых чи-сел, нужно применить к каждому элементу списка функцию int:
A = [ int(x) for x in s ]
Вместо генератора можно было использовать функцию map:
A = list(map(int, s))
Такая запись означает «применить функцию int ко всем элементам списка s и составить из полученных чисел новый список (объект типа list)».
Теперь поговорим о выводе массива на экран. Самый простой способ – вывести список как один объект:
Print (A)
В этом случае весь список берётся в квадратные скобки, и элементы разделяются запятыми.
Вывести массива на экран можно и поэлементно
for i in range(N):
print (A[i], end = " ")
После вывода каждого элемента ставится пробел, иначе все значения сольются в одну строку.
Удобно записывать такой цикл несколько иначе:
for x in A:
print (x, end = " ")
Здесь не используется переменная-индекс i, а просто перебираются все элементы списка: на каждом шаге в переменную x заносится значение очередного элемента массива (в порядке возрастания индексов).
Более быстрый способ – построить одну символьную строку, содержащую все элементы массива, и сразу вывести её на экран:
print (" ".join([ str(x) for x in A]))
Функция join (англ. join – объединить) объединяет символьные строки, используя указанный перед точкой разделитель, в данном случае – пробел. Запись str(x) означает «символьная запись x ».Таким образом,элементы массива записываются через пробел в одну символьную строку,иэта строка затем выводится на экран с помощью функции print.