array

В модуле array объявляется новый тип объектов – array, который действует практически так же, как список, но все его элементы могут принадлежать только одному какому-нибудь типу.

Модуль array может пригодиться, когда потребуется реализовать списки данных с эффективным расходованием памяти и известно, что все элементы списка принадлежат одному типу. Например, чтобы сохранить список из 10 миллионов целых чисел, потребуется примерно 160 Мбайт памяти, тогда как массив из 10 миллионов целых чисел займет всего 40 Мбайт. Несмотря на такую экономию памяти, ни одна из основных операций над массивами не выполняется быстрее, чем аналогичные операции над списками, более того, они могут оказаться даже медленнее.

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

a = array.array('i', [1,2,3,4,5])
b = array.array(a.typecode, (2*x for x in a))
# Создаст новый массив из a

Поскольку выигрыш от использования массивов заключается в экономии памяти, возможно, окажется более осмысленным выполнить операции непосредственно в исходном массиве. Функция enumerate() обеспечивает эффективный способ реализации таких операций, например:

a = array.array('i', [1,2,3,4,5])
for i, x in enumerate(a):
    a[i] = 2*x

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

Тип элементов массива определяется в момент создания с помощью одного из кодов, перечисленных в табл.

Код типа

Описание

Тип в языке C

Минимальный размер (в байтах)

c

8-битный символ

char

1

b

8-битное целое

signed char

1

B

8-битное целое без знака

unsigned char

1

u

Символ Юникода

PY_UNICODE

2 или 4

h

16-битное целое

short

2

H

16-битное целое без знака

unsigned short

2

i

Целое

int

4 или 8

I

Целое без знака

unsigned int

4 или 8

l

Длинное целое

long

4 или 8

L

Длинное целое без знака

unsigned long

4 или 8

f

float одинарной точности

float

4

d

float двойной точности

double

8

array.array(typecode[, initializer])
  • initializer - строка или список значений, используемых для инициализации значений элементов массива

Возвращает объект массив элементов типа typecode. При попытке вставить в массив элементы, тип которых не совпадает с типом, использовавшимся при создании массива, возбуждается исключение TypeError.

array.count(x)

Возвращает количество вхождений x в массиве.

array.extend(b)

Добавляет объект b в конец массива a. Объект b может быть массивом или другим итерируемым объектом, тип элементов которого совпадает с типом элементов массива a .

array.fromfile(f, n)

Читает n элементов (в двоичном формате) из объекта файла f и добавляет их в конец массива. Аргумент f должен быть объектом файла. Если количество элементов, которое удалось прочитать из файла, окажется меньше, чем n, возбуждает исключение EOFError.

array.fromlist(list)

Добавляет элементы из списка list в конец массива a. Аргумент list может быть итерируемым объектом.

array.fromstring(s)

Добавляет элементы из строки s в конец массива, где s интерпретируется как строка двоичных значений, как если бы чтение выполнялось методом fromfile().

array.index(x)

Возвращает индекс первого вхождения значения x в массиве a. В случае отсутствия значения x возбуждает исключение ValueError.

array.insert(i, x)

Вставляет новый элемент со значением x перед элементом с индексом i.

array.pop([i])

Удаляет из массива элемент с индексом i и возвращает его. Если аргумент i опущен, удаляет последний элемент.

array.remove(x)

Удаляет первое вхождение x из массива. В случае отсутствия значения x возбуждает исключение ValueError.

array.reverse()

Переставляет элементы массива в обратном порядке.

array.tofile(f)

Записывает все элементы массива в файл f. Данные сохраняются в двоичном формате.

array.tolist()

Преобразует массив в обычный список.

array.tostring()

Преобразует массив в строку двоичных данных, как если бы запись выполнялась методом tofile().

array.tounicode()

Преобразует массив в строку Юникода. Возбуждает исключение ValueError, если элементы массива имеют тип, отличный от ‘u’.