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


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

Код типа Тип C Тип Python Мин. размер в байтах Прим.
'b' signed char int 1  
'B' unsigned char int 1  
'u' Py_UNICODE Unicode character 2 (1)
'h' signed short int 2  
'H' unsigned short int 2  
'i' signed int int 2  
'I' unsigned int int 2  
'l' signed long int 4  
'L' unsigned long int 4  
'q' signed long long int 8  
'Q' unsigned long long int 8  
'f' float float 4  
'd' double float 8  

Примечания:

  1. Код типа 'u' соответствует устаревшему Юникод символу Python (Py_UNICODE, который равен wchar_t). В зависимости от платформы это может быть 16 или 32 бит.

    'u' будет удалён вместе с остальной частью API Py_UNICODE.

    Устарело с версии 3.3, будет удалено в 4.0 версии..

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

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

class array.array(typecode[, initializer])

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

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

Поднимает событие аудита array.__new__ с аргументами typecode, initializer.

array.typecodes

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

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

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

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 (как машинные значения) из файлового объекта f и добавить их в конец массива. Если доступно менее n элементов, возникает EOFError, но доступные элементы все равно вставляются в массив. f должен быть реальным встроенным файловым объектом; что-то ещё с методом read() не подойдет.

array.fromlist(list)

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

array.fromstring()

Устаревший псевдоним для frombytes().

Устарело с версии 3.2, будет удалено в 3.9 версии..

array.fromunicode(s)

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

array.index(x)

Возвращает наименьшее значение i, чтобы i был индексом первого появления x в массиве.

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)

Записать все элементы (как машинные значения) в файловый объект f.

array.tolist()

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

array.tostring()

Устаревший псевдоним для tobytes().

Устарело с версии 3.2, будет удалено в 3.9 версии..

array.tounicode()

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

Когда объект массива печатается или преобразуется в строку, он представляется как array(typecode, initializer). initializer пропускается, если массив пуст, в противном случае это строка, если typecode'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
Расширение Numeric Python (NumPy) определяет другой тип массива; см. для получения дополнительной информации о Numerical Python.