array — Эффективные массивы числовых значений
Этот модуль определяет тип объекта, который может компактно представлять массив базовых значений: символов, целых чисел, чисел с плавающей точкой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип объектов, хранящихся в них, ограничен. Тип задаётся в момент создания объекта с помощью кода типа, который представляет собой одиночный символ. Определены следующие коды типа:
Код типа | Тип C | Тип Python | Минимальный размер в байтах | Примечания |
|---|---|---|---|---|
| signed char | int | 1 | |
| unsigned char | int | 1 | |
| wchar_t | Символ Юникода | 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 |
Примечания:
-
Он может составлять 16 или 32 бита в зависимости от платформы.
Изменено в версии 3.9:
array('u')теперь используетwchar_tв качестве типа C вместо устаревшегоPy_UNICODE. Это изменение не влияет на его поведение, потому чтоPy_UNICODEявляется псевдонимомwchar_tс Python 3.3.Устарело начиная с версии 3.3, будет удалено в версии 4.0.
Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут itemsize.
Модуль определяет следующий тип:
-
class array.array(typecode[, initializer]) -
Новый массив, элементы которого ограничены кодом типа и инициализированы из необязательного значения инициализатора, которое должно быть списком, объектом типа байты или итерируемым объектом над элементами соответствующего типа.
Если задан список или строка, инициализатор передаётся методам нового массива
fromlist(),frombytes()илиfromunicode()(см. ниже) для добавления начальных элементов в массив. В противном случае, итерируемый инициализатор передаётся методуextend().Возбуждает событие аудита
array.__new__с аргументамиtypecode,initializer.
-
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) -
Добавляет элементы из итерируемого объекта в конец массива. Если итерируемый объект является другим массивом, он должен иметь точно такой же код типа; в противном случае, будет поднято исключение
TypeError. Если итерируемый объект не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.
-
array.frombytes(s) -
Добавляет элементы из строки, интерпретируя строку как массив машинных значений (как если бы она была прочитана из файла с помощью метода
fromfile()).Новое в версии 3.2:
fromstring()переименовано вfrombytes()для ясности.
-
array.fromfile(f, n) -
Считывает n элементов (как машинные значения) из объекта файла f и добавляет их в конец массива. Если доступно меньше n элементов, генерируется
EOFError, но доступные элементы всё равно вставляются в массив.
-
array.fromlist(list) -
Добавляет элементы из списка. Это эквивалентно
for x in list: a.append(x), за исключением того, что если возникает ошибка типа, массив не изменяется.
-
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.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])
См. также
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/array.html