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


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

Код типа Тип 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' будет удален вместе с остальными Py_UNICODE API.

    Устарело с версии 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()

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

array.count(x)

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

array.extend(iterable)

Добавление элементов из iterable в конец массива. Если iterable другой массив, он должен иметь exactly же самый код типа; в противном случае вызовется исключение 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 содержит „у» в противном случае список чисел. Гарантирована возможность преобразования строки обратно в массив с одинаковым типом и значением с помощью 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])

См.также

Module struct
Упаковка и распаковка разнородных двоичных данных.
Module xdrlib
Упаковка и распаковка данных Внешнего Представления Данных (XDR), используемых в некоторых системах удаленного вызова процедур.
The Numerical Python Documentation
The Numeric Python extension (NumPy) определяет другие типы массивов; см. http://www.numpy.org/ для получения дополнительной информации о Numerical Python.