Массивы, они же списки

Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу или набору индексов, принимающих целые (или приводимые к целым) значения из некоторого заданного непрерывного диапазона.

Массивы нужны для удобного хранения и обработки данных.

В Python массивы реализованы списками (list) и кортежами (tuple).

На самом деле, ни список, ни кортеж не являются массивами в их понимании в классических языках программирования. Массивы в них - это хранилище данных одного типа. Списки и кортежи же - хранилища данных разных типов (можно и одного, но это соглашение будет только на уровне программиста). В одном списке могут быть целые числа, числа с плавающей точкой, строки, другие списки и т. д.

Допустим, мы хотим из введённых 4 значений выбрать только положительные.

Это можно сделать без массивов:

a = int(input("a="))
b = int(input("b="))
c = int(input("c="))
d = int(input("d="))

if a > 0:
    print(a)
if b > 0:
    print(b)
if c > 0:
    print(c)
if d > 0:
    print(d)

Но что, если значений не 4, а 100? Или вообще, усложним задачу: числа вводятся до тех пор, пока пользователь не введёт пустую строку. Вот тут-то нам и пригодятся массивы, а также ранее изученные темы.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
positive_numbers = []

user_input = input()
while user_input:
    number = int(user_input)
    if number > 0:
        positive_numbers.append(number)
    user_input = input()

print(positive_numbers)

В строке 1 мы создаём пустой список. Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов.

Пустой список создаётся с помощью выражения []. Можно создавать непустые списки:

>>> array = [1, 2, 3, 0, 1.4, -2]
>>> array
[1, 2, 3, 0, 1.4, -2]

Список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего. Так, например, можно реализовать многомерный массив:

array = [
    [1, 2, 3, 4],
    [2, 2, 3, 4],
    [3, 3, 3, 4],
    [4, 4, 4, 4],
]

В строке 7 positive_numbers.append(number) мы добавляем число в массив. Разумеется, в строках выше у нас цикл, читающий всё до пустой строки, преобразование ввода в число, проверка на положительность числа.

append - это метод списка. Метод - это функция, принадлежащая какому-то классу или объекту. Подробнее про методы мы поговорим позже, сейчас же достаточно знать, что, если positive_numbers - список, то через точку можно написать append, что добавит в конец списка элемент со значением number.

С методами списков можно ознакомиться здесь.

К элементам массива (списка) можно обращаться по индексу:

>>> array = [1, 2, 3, 0, 1.4, -2]
>>> print(array[0])
1
>>> print(array[1])
2
>>> print(array[3])
0

Нумерация массивов, как в большинстве языков программирования, в Python идёт с нуля (то есть первый элемент массива имеет индекс 0, второй - индекс 1, и т.д.)

Индекс, в общем случае, не обязан быть числом. К элементам хеш-таблиц (которые мы рассмотрим позже) можно обращаться по строковому индексу.

Однако, в отличие от многих языков, в Python можно обращаться к элементам по отрицательному индексу. Такой синтаксис позволяет обращаться к элементам с конца массива. Нумерация в таком случае идёт с -1.

>>> array = [1, 2, 3, 0, 1.4, -2]
>>> print(array[-1])
-2
>>> print(array[-2])
1.4
>>> print(array[-5])
2

Также, поскольку списки - изменяемый тип данных, то по индексу возможно присвоение:

>>> array = [1, 2, 3, 0, 1.4, -2]
>>> array[1] = 42
>>> array
[1, 42, 3, 0, 1.4, -2]

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

array = [1, 2, 3, 0, 1.4, -2]
index = 0
while index < len(array):
    print(array[index])
    index = index + 1

len(array) возвращает количество элементов в массиве.

Можно напечатать все значения в обратном порядке; эту задачу я оставляю читателю.