array — Эффективные массивы числовых значений


Этот модуль определяет тип объекта, который может компактно представлять массив основных значений: символов, целых чисел, чисел с плавающей точкой. Массивы являются типами последовательностей и ведут себя очень похоже на списки, за исключением того, что тип объектов, хранящихся в них, ограничен. Тип задается при создании объекта с помощью символа type code, который представляет собой один символ. Определены следующие коды типов:

Код типа

C Тип

Тип Python

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

Примечания

'b'

подписанный символ

int

1

'B'

беззнаковый символ

int

1

'u'

wchar_t

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

2

(1)

'h'

короткая подпись

int

2

'H'

беззнаковое сокращение

int

2

'i'

знаковый инт

int

2

'I'

unsigned int

int

2

'l'

длинная подпись

int

4

'L'

беззнаковая длина

int

4

'q'

подписанный длинный длинный

int

8

'Q'

беззнаковая длина long

int

8

'f'

float

float

4

'd'

двойной

float

8

Примечания:

  1. Он может быть 16 или 32 бита в зависимости от платформы.

    Изменено в версии 3.9: array('u') теперь использует wchar_t в качестве C-типа вместо устаревшего Py_UNICODE. Это изменение не влияет на его поведение, поскольку Py_UNICODE является псевдонимом wchar_t с версии Python 3.3.

    Deprecated since version 3.3, will be removed in version 4.0.

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

Модуль определяет следующий тип:

class array.array(typecode[, initializer])

Новый массив, элементы которого ограничены typecode и инициализируются из необязательного значения initializer, которое должно быть списком, bytes-like object или итерабельным по элементам соответствующего типа.

Если дан список или строка, инициализатор передается методу fromlist(), frombytes() или fromunicode() (см. ниже) нового массива для добавления в него начальных элементов. В противном случае инициализатор итерируемого массива передается методу extend().

Вызывает auditing event array.__new__ с аргументами typecode, initializer.

array.typecodes

Строка со всеми доступными кодами типов.

Объекты массива поддерживают обычные последовательные операции индексации, среза, конкатенации и умножения. При использовании присваивания среза, присваиваемое значение должно быть объектом массива с тем же кодом типа; во всех остальных случаях передается TypeError. Объекты массива также реализуют интерфейс буфера и могут использоваться везде, где поддерживается bytes-like objects.

Также поддерживаются следующие элементы данных и методы:

array.typecode

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

array.itemsize

Длина в байтах одного элемента массива во внутреннем представлении.

array.append(x)

Добавляет новый элемент со значением x в конец массива.

array.buffer_info()

Возвращает кортеж (address, length), дающий текущий адрес памяти и длину в элементах буфера, используемого для хранения содержимого массива. Размер буфера памяти в байтах может быть вычислен как array.buffer_info()[1] * array.itemsize. Это иногда полезно при работе с низкоуровневыми (и по своей сути небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, например, некоторые операции ioctl(). Возвращаемые числа действительны до тех пор, пока существует массив и к нему не применяются операции, изменяющие длину.

Примечание

При использовании объектов массивов из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), имеет смысл использовать интерфейс буфера, поддерживаемый объектами массивов. Этот метод поддерживается для обратной совместимости, и его следует избегать в новом коде. Интерфейс буфера документирован в Буферный протокол.

array.byteswap()

«Байтовая замена» всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для других типов значений выдается сообщение RuntimeError. Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.

array.count(x)

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

array.extend(iterable)

Добавляет элементы из iterable в конец массива. Если iterable является другим массивом, то он должен иметь точно такой же код типа; если нет, то будет выдано сообщение TypeError. Если iterable не является массивом, он должен быть итерируемым, а его элементы должны иметь правильный тип для добавления в массив.

array.frombytes(s)

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

Добавлено в версии 3.2: fromstring() переименован в frombytes() для ясности.

array.fromfile(f, n)

Прочитайте n элементов (как машинные значения) из массива file object f и добавьте их в конец массива. Если доступно менее n элементов, то выдается сообщение EOFError, но элементы, которые были доступны, все равно вставляются в массив.

array.fromlist(list)

Добавить элементы из списка. Это эквивалентно for x in list: a.append(x) за исключением того, что если произошла ошибка типа, массив не изменяется.

array.fromunicode(s)

Расширяет данный массив данными из заданной строки unicode. Массив должен быть массивом типа 'u'; в противном случае возникает ошибка ValueError. Используйте array.frombytes(unicodestring.encode(enc)) для добавления данных Unicode к массиву другого типа.

array.index(x[, start[, stop]])

Возвращает наименьший i такой, что i является индексом первого вхождения x в массив. Необязательные аргументы start и stop могут быть указаны для поиска x в пределах подраздела массива. Вызов ValueError, если x не найден.

Изменено в версии 3.10: Добавлены необязательные параметры start и stop.

array.insert(i, x)

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

array.pop([i])

Удаляет элемент с индексом i из массива и возвращает его. Необязательный аргумент по умолчанию имеет значение -1, поэтому по умолчанию удаляется и возвращается последний элемент.

array.remove(x)

Удалить первое вхождение x из массива.

array.reverse()

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

array.tobytes()

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

Добавлено в версии 3.2: tostring() переименован в tobytes() для ясности.

array.tofile(f)

Запишите все элементы (как машинные значения) в file object f.

array.tolist()

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

array.tounicode()

Преобразование массива в строку юникода. Массив должен быть массивом типа 'u'; в противном случае выдается сообщение ValueError. Используйте array.tobytes().decode(enc) для получения юникодовой строки из массива другого типа.

Когда объект массива печатается или преобразуется в строку, он представляется как array(typecode, initializer). Инициализатор* опускается, если массив пуст, иначе это строка, если тип-код равен 'u', иначе это список чисел. Гарантируется, что строка может быть преобразована обратно в массив с тем же типом и значением с помощью eval(), если класс array был импортирован с помощью from array import array. Примеры:

array('l')
array('u', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])

См.также

Модуль struct

Упаковка и распаковка разнородных двоичных данных.

Модуль xdrlib

Упаковка и распаковка данных внешнего представления данных (XDR), используемых в некоторых системах удаленного вызова процедур.

NumPy

Пакет NumPy определяет еще один тип массива.

Вернуться на верх