Spec-Zone.ru › Python 3.7

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

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

Код типа

Тип C

Тип Python

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

Примечания

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

Py_UNICODE

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

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])

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

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

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()

Изменить порядок элементов в массиве.

END_OF_DOCUMENT_MARKER
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). Инициализатор опускается, если массив пустой, в противном случае это строка, если тип 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])

См. также

Module struct

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

Module xdrlib

Упаковка и распаковка данных External Data Representation (XDR), используемых в некоторых системах удалённых процедурных вызовов.

Документация Numerical Python

Расширение Numeric Python (NumPy) определяет другой тип массива; см. http://www.numpy.org/ для получения дополнительной информации о Numerical Python.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/array.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API