array — Эффективные массивы числовых значений
В этом модуле определен тип объекта, который может компактно представлять массив базовых значений: символы, целые числа, числа с плавающей точкой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип объектов, хранящихся в них, ограничен. Тип задается во время создания объекта с помощью кода типа, который представляет собой один символ. Определены следующие коды типов:
Код типа | Тип C | Тип Python | Минимальный размер в байтах | Примечания |
|---|---|---|---|---|
| signed char | int | 1 | |
| unsigned char | int | 1 | |
| Py_UNICODE | Символ Юникода | 2 | (1) |
| signed short | int | 2 | |
| unsigned short | int | 2 | |
| signed int | int | 2 | |
| unsigned int | int | 2 | |
| signed long | int | 4 | |
| unsigned long | int | 4 | |
| signed long long | int | 8 | |
| unsigned long long | int | 8 | |
| float | float | 4 | |
| double | float | 8 |
Примечания:
-
Код типа
'u'соответствует устаревшему символу Юникода Python (Py_UNICODE, который являетсяwchar_t). В зависимости от платформы, он может занимать 16 бит или 32 бита.'u'будет удален вместе со всем остальным APIPy_UNICODE.Устарело начиная с версии 3.3, будет удалено в версии 4.0.
Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут itemsize.
Модуль определяет следующий тип:
-
class array.array(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().Устарело начиная с версии 3.2, будет удалено в версии 3.9.
-
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().Устарело начиная с версии 3.2, будет удалено в версии 3.9.
-
array.tounicode() -
Преобразовать массив в строку Юникода. Массив должен быть типа
'u'массив; в противном случае генерируетсяValueError. Используйтеarray.tobytes().decode(enc)для получения строки Юникода из массива другого типа.
При выводе объекта массива или его преобразовании в строку он представляется как 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])
См. также
-
Modulestruct -
Упаковка и распаковка разнородных двоичных данных.
-
Modulexdrlib -
Упаковка и распаковка данных External Data Representation (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.7/library/array.html