Spec-Zone.ru › Python 3.12

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

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

Код типа

Тип C

Тип Python

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

Примечания

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

wchar_t

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

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. В зависимости от платформы это может быть 16 или 32 бита.

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

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

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

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

array.typecodes

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

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

class array.array(typecode[, initializer])

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

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

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

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

typecode

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

itemsize

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

append(x)

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

buffer_info()

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

Примечание

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

byteswap()

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

count(x)

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

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

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

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

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

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

insert(i, x)

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

pop([i])

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

remove(x)

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

reverse()

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

tobytes()

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

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

tofile(f)

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

tolist()

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

tounicode()

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

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

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

См. также

Module struct

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

Module xdrlib

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

NumPy

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

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

Spec-Zone.ru

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