Документация Python неофициальный перевод

array – Эффективные массивы числовых значенийarray – Efficient arrays of numeric values


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

Код типа

Тип C

Тип Python

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

Примечания

'b'

signed char

int

1

'B'

unsigned char

int

1

'w'

Py_UCS4

символ Unicode

4

(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

'e'

_Float16

float

2

(2)

'f'

float

float

4

'd'

double

float

8

'Zf'

float complex

complex

8

(3)

'Zd'

double complex

complex

16

(3)

Примечания:

  1. Добавлено в версии 3.13.

  2. Тип IEEE 754 binary16 «половинной точности» был введён в редакции 2008 года стандарта IEEE 754. Этот тип не получил широкой поддержки в компиляторах C. Он доступен как тип _Float16, если компилятор поддерживает Приложение H стандарта C23.

    Добавлено в версии 3.15.

  3. Комплексные типы (Zf и Zd) доступны безусловно, независимо от поддержки комплексных типов (Приложение G стандарта C11) компилятором C. Как указано в стандарте C11, каждый комплексный тип представлен массивом C из двух элементов, содержащим вещественную и мнимую части соответственно.

    Добавлено в версии 3.15.

См. также

Модули ctypes и struct, а также сторонние модули, такие как numpy, используют похожие, но немного отличающиеся коды типов.

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

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

array.typecodes

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

Изменено в версии 3.15: Тип изменился с str на tuple.

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

class array.array(typecode[, initializer])

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

Если передан объект bytes или bytearray, инициализатор передаётся методу frombytes() нового массива; если передана строка Unicode, инициализатор передаётся методу fromunicode(); в противном случае итератор инициализатора передаётся методу extend() для добавления начальных элементов в массив.

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

Массивы являются обобщёнными по типу своего содержимого.

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

typecode

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

itemsize

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

append(value, /)

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

buffer_info()

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

Примечание

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

byteswap()

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

count(value, /)

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

extend(iterable, /)

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

frombytes(buffer, /)

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

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

fromfile(f, n, /)

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

fromlist(list, /)

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

fromunicode(ustr, /)

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

index(value[, start[, stop]])

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

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

insert(index, value, /)

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

pop(index=-1, /)

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

remove(value, /)

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

clear()

Удаляет все элементы из массива.

Добавлено в версии 3.13.

reverse()

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

tobytes()

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

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

tofile(f, /)

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

tolist()

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

tounicode()

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

Строковое представление объектов массива имеет вид array(typecode, initializer). Инициализатор опускается, если массив пуст, в противном случае это строка Unicode, если код типа равен 'w', иначе это список чисел. Гарантируется, что строковое представление можно преобразовать обратно в массив с тем же типом и значением с помощью eval(), при условии, что класс array был импортирован с помощью from array import array. Переменные inf и nan также должны быть определены, если массив содержит соответствующие значения с плавающей запятой. Примеры:

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

См. также

Модуль struct

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

NumPy

Пакет NumPy определяет другой тип массива.