array
— Эффективные массивы числовых значений¶
Этот модуль определяет объектный тип, который может компактно представлять массив базовых значений: символов, целых чисел, чисел с плавающей точкой. Массивы являются типами последовательностей и ведут себя подобно спискам, за исключением того, что тип объектов, хранящихся в них, ограничен. Тип задается при создании объекта с помощью символа type code, который представляет собой один символ. Определены следующие коды типов:
Код типа |
Тип C |
Тип Python |
Минимальный размер в байтах |
Примечания |
---|---|---|---|---|
|
подписанный символ |
int |
1 |
|
|
беззнаковый символ |
int |
1 |
|
|
wchar_t |
Символ Юникода |
2 |
(1) |
|
Py_UCS4 |
Символ Юникода |
4 |
|
|
подписанный короткий |
int |
2 |
|
|
беззнаковое короткое |
int |
2 |
|
|
подписанный интеллект |
int |
2 |
|
|
unsigned int |
int |
2 |
|
|
длинная подпись |
int |
4 |
|
|
беззнаковая длина |
int |
4 |
|
|
подписанный длинный длинный |
int |
8 |
|
|
unsigned long long |
int |
8 |
|
|
float |
float |
4 |
|
|
двойной |
float |
8 |
Примечания:
В зависимости от платформы он может быть 16 или 32 бита.
Изменено в версии 3.9:
array('u')
теперь используетwchar_t
в качестве C-типа вместо устаревшегоPy_UNICODE
. Это изменение не влияет на его поведение, посколькуPy_UNICODE
является псевдонимомwchar_t
с Python 3.3.Утратил актуальность с версии 3.3, будет удален в версии 3.16: Пожалуйста, перейдите на типовой код
'w'
.
Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией языка C). Доступ к фактическому размеру можно получить через атрибут array.itemsize
.
Модуль определяет следующий элемент:
- array.typecodes¶
Строка со всеми доступными кодами типов.
Модуль определяет следующий тип:
- class array.array(typecode[, initializer])¶
Новый массив, элементы которого ограничены typecode и инициализируются из необязательного значения initializer, которое должно быть объектом
bytes
илиbytearray
, строкой Unicode или итерируемым над элементами соответствующего типа.Если задан объект
bytes
илиbytearray
, инициализатор передается в методfrombytes()
нового массива; если задана строка Unicode, инициализатор передается в методfromunicode()
; в противном случае итератор инициализатора передается в методextend()
для добавления начальных элементов в массив.Объекты массива поддерживают обычные последовательные операции индексации, нарезки, конкатенации и умножения. При использовании присваивания срезов присваиваемое значение должно быть объектом массива с тем же кодом типа; во всех остальных случаях присваивается
TypeError
. Объекты массивов также реализуют интерфейс буфера и могут использоваться везде, где поддерживается 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()
операций. Возвращаемые числа действительны до тех пор, пока существует массив и к нему не применяются операции, изменяющие длину.Примечание
При использовании объектов массивов из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), имеет смысл использовать интерфейс буфера, поддерживаемый объектами массивов. Этот метод поддерживается для обратной совместимости, и его следует избегать в новом коде. Интерфейс буфера документирован в Буферный протокол.
- byteswap()¶
«Байтовая замена» всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для других типов значений используется значение
RuntimeError
. Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.
- count(x)¶
Возвращает количество вхождений x в массив.
- extend(iterable)¶
Добавляет элементы из iterable в конец массива. Если iterable - это другой массив, то он должен иметь точно такой же код типа; если это не так, то будет выдано сообщение
TypeError
. Если iterable не является массивом, он должен быть итерируемым, а его элементы должны иметь правильный тип, чтобы быть добавленными в массив.
- frombytes(buffer)¶
Добавляет элементы из bytes-like object, интерпретируя его содержимое как массив машинных значений (как если бы он был прочитан из файла с помощью метода
fromfile()
).Added in version 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. Массив должен иметь код типа
'u'
или'w'
; в противном случае выдается сообщение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.
- clear()¶
Удалите все элементы из массива.
Added in version 3.13.
- reverse()¶
Измените порядок элементов в массиве.
- tobytes()¶
Преобразуйте массив в массив машинных значений и верните представление байтов (ту же последовательность байтов, которая была бы записана в файл методом
tofile()
).Added in version 3.2:
tostring()
переименован вtobytes()
для ясности.
- tofile(f)¶
Запишите все элементы (в виде машинных значений) в file object f.
- tolist()¶
Преобразуйте массив в обычный список с теми же элементами.
- tounicode()¶
Преобразование массива в строку Юникода. Массив должен иметь тип
'u'
или'w'
; в противном случае возникает ошибкаValueError
. Используйтеarray.tobytes().decode(enc)
, чтобы получить строку Юникода из массива другого типа.
Строковое представление объектов массива имеет вид array(typecode, initializer)
. Инициализатор* опускается, если массив пуст, в противном случае это строка Unicode, если typecode равен 'u'
или 'w'
, в противном случае это список чисел. Строковое представление гарантированно может быть преобразовано обратно в массив с тем же типом и значением с помощью eval()
, если класс array
был импортирован с помощью from array import array
. Переменные inf
и nan
также должны быть определены, если они содержат соответствующие значения с плавающей точкой. Примеры:
array('l')
array('w', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])