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 |
Примечания:
-
Код типа
'u'соответствует устаревшему символу Юникода Python (Py_UNICODE, который представляет собойwchar_t). В зависимости от платформы, он может занимать 16 или 32 бита.'u'будет удалён вместе с остальной частью APIPy_UNICODE.Устарело начиная с версии 3.3, будет удалено в версии 4.0.
-
Коды типов
'q'и'Q'доступны только если платформа компилятора C, используемая для построения Python, поддерживает Clong 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])
См. также
-
Modulestruct - Упаковки и распаковки разнородных двоичных данных.
-
Modulexdrlib - Упаковки и распаковки данных внешнего представления данных (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