Spec-Zone.ru › Python 3.5

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

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

Код типа Тип C Тип Python Минимальный размер в байтах Примечания
'b' signed char int 1
'B' unsigned char int 1
'u' Py_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 (2)
'Q' unsigned long long int 8 (2)
'f' float float 4
'd' double float 8

Примечания:

  1. Код типа 'u' соответствует устаревшему символу Юникода Python (Py_UNICODE, который представляет собой wchar_t). В зависимости от платформы, он может занимать 16 или 32 бита.

    'u' будет удалён вместе с остальной частью API Py_UNICODE.

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

  2. Коды типов 'q' и 'Q' доступны только если платформа компилятора C, используемая для построения Python, поддерживает C long long, или, на Windows, __int64.

    Введено в версии 3.3.

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

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

class array.array(typecode[, initializer])

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

Если задан список или строка, то инициализатор передаётся в новый массив методу fromlist(), frombytes() или fromunicode() (см. ниже), чтобы добавить начальные элементы в массив. В противном случае итерируемый инициализатор передаётся методу extend().

array.typecodes

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

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

Также поддерживаются следующие данные и методы:

array.typecode

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

array.itemsize

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

array.append(x)

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

array.buffer_info()

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

Примечание

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

array.byteswap()

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

array.count(x)

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

array.extend(iterable)

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

array.frombytes(s)

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

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

array.fromfile(f, n)

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

array.fromlist(list)

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

array.fromstring()

Устаревший псевдоним для frombytes().

array.fromunicode(s)

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

array.index(x)

Возвращает наименьшее i, такое что i — это индекс первого вхождения x в массиве.

array.insert(i, x)

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

array.pop([i])

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

array.remove(x)

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

array.reverse()

Меняет порядок элементов в массиве.

array.tobytes()

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

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

array.tofile(f)

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

array.tolist()

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

array.tostring()

Устаревший псевдоним для tobytes().

array.tounicode()

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

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

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

См. также

Module struct
Упаковки и распаковки разнородных двоичных данных.
Module xdrlib
Упаковки и распаковки данных внешнего представления данных (XDR), используемых в некоторых системах удалённых процедурных вызовов.
Документация Numerical Python
Расширение Numeric Python (NumPy) определяет другой тип массива; см. http://www.numpy.org/ для получения дополнительной информации о Numerical Python.

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

Spec-Zone.ru

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