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


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

Код типа

Тип C

Тип Python

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

Записи

'b'

подписанный символ

инт

1

'B'

неподписанный символ

инт

1

'u'

wchar_t

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

2

(1)

'h'

короткая подпись

инт

2

'H'

короткий без знака

инт

2

'i'

подписанный int

инт

2

'I'

неподписанный int

инт

2

'l'

подписано длинно

инт

4

'L'

неподписанный длинный

инт

4

'q'

подписано долго долго

инт

8

'Q'

неподписанный длинный длинный

инт

8

'f'

плыть

плыть

4

'd'

двойной

плыть

8

Записи:

  1. Он может быть 16-битным или 32-битным, в зависимости от платформы.

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

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

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

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

array.typecodes

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

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

class array.array(typecode[, initializer])

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

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

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

Создает auditing event array.__new__ с аргументами typecode, initializer.

typecode

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

itemsize

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

append(x)

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

buffer_info()

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

Примечание

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

byteswap()

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

count(x)

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

extend(iterable)

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

frombytes(buffer)

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

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

fromfile(f, n)

Считайте n элементов (как машинные значения) из file object f и добавляйте их в конец массива. Если доступно менее n элементов, выводится значение EOFError, но элементы, которые были доступны, все равно вставляются в массив.

fromlist(list)

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

fromunicode(s)

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

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)

Запишите все элементы (как машинные значения) в file object f.

tolist()

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

tounicode()

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

Строковое представление объектов массива имеет вид array(typecode, 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])

См.также

Модуль struct

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

Модуль xdrlib

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

NumPy

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

Вернуться на верх