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, то значение initializer передаётся методу нового массива frombytes(); если задана строка Юникод, то значение initializer передаётся методу fromunicode(); в противном случае итератор initializer передаётся методу 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 в подчасти массива. Возбуждает ValueError, если x не найден.

Изменено в версии 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