Spec-Zone.ru › Python 3.11

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

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

Код типа

Тип C

Тип Python

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

Примечания

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

wchar_t

символ 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. В зависимости от платформы размер может составлять 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, строкой Unicode либо итерируемым объектом, содержащим элементы соответствующего типа.

Если передан объект bytes или bytearray, значение инициализатора передаётся методу нового массива frombytes(); если передана строка Unicode, значение инициализатора передаётся методу 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)

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

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

Возвращает наименьший 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()

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

Строковое представление объектов-массивов имеет вид array(typecode, initializer). Если массив пуст, initializer опускается; в противном случае это строка Unicode, если 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

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

NumPy

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

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

Spec-Zone.ru

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