array
— Эффективные массивы числовых значений¶
Этот модуль определяет тип объекта, который может компактно представлять массив основных значений: символов, целых чисел, чисел с плавающей точкой. Массивы являются типами последовательностей и ведут себя очень похоже на списки, за исключением того, что тип объектов, хранящихся в них, ограничен. Тип задается при создании объекта с помощью символа type code, который представляет собой один символ. Определены следующие коды типов:
Код типа |
C Тип |
Тип Python |
Минимальный размер в байтах |
Примечания |
---|---|---|---|---|
|
подписанный символ |
int |
1 |
|
|
беззнаковый символ |
int |
1 |
|
|
wchar_t |
Символ Юникода |
2 |
(1) |
|
короткая подпись |
int |
2 |
|
|
беззнаковое сокращение |
int |
2 |
|
|
знаковый инт |
int |
2 |
|
|
unsigned int |
int |
2 |
|
|
длинная подпись |
int |
4 |
|
|
беззнаковая длина |
int |
4 |
|
|
подписанный длинный длинный |
int |
8 |
|
|
беззнаковая длина 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.Deprecated since version 3.3, will be removed in version 4.0.
Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией языка C). Доступ к фактическому размеру можно получить через атрибут itemsize
.
Модуль определяет следующий тип:
-
class
array.
array
(typecode[, initializer])¶ Новый массив, элементы которого ограничены typecode и инициализируются из необязательного значения initializer, которое должно быть списком, bytes-like object или итерабельным по элементам соответствующего типа.
Если дан список или строка, инициализатор передается методу
fromlist()
,frombytes()
илиfromunicode()
(см. ниже) нового массива для добавления в него начальных элементов. В противном случае инициализатор итерируемого массива передается методуextend()
.Вызывает auditing event
array.__new__
с аргументамиtypecode
,initializer
.
-
array.
typecodes
¶ Строка со всеми доступными кодами типов.
Объекты массива поддерживают обычные последовательные операции индексации, среза, конкатенации и умножения. При использовании присваивания среза, присваиваемое значение должно быть объектом массива с тем же кодом типа; во всех остальных случаях передается TypeError
. Объекты массива также реализуют интерфейс буфера и могут использоваться везде, где поддерживается bytes-like objects.
Также поддерживаются следующие элементы данных и методы:
-
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 элементов (как машинные значения) из массива file object f и добавьте их в конец массива. Если доступно менее n элементов, то выдается сообщение
EOFError
, но элементы, которые были доступны, все равно вставляются в массив.
-
array.
fromlist
(list)¶ Добавить элементы из списка. Это эквивалентно
for x in list: a.append(x)
за исключением того, что если произошла ошибка типа, массив не изменяется.
-
array.
fromunicode
(s)¶ Расширяет данный массив данными из заданной строки unicode. Массив должен быть массивом типа
'u'
; в противном случае возникает ошибкаValueError
. Используйтеarray.frombytes(unicodestring.encode(enc))
для добавления данных Unicode к массиву другого типа.
-
array.
index
(x[, start[, stop]])¶ Возвращает наименьший i такой, что i является индексом первого вхождения x в массив. Необязательные аргументы start и stop могут быть указаны для поиска x в пределах подраздела массива. Вызов
ValueError
, если x не найден.Изменено в версии 3.10: Добавлены необязательные параметры start и stop.
-
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)¶ Запишите все элементы (как машинные значения) в file object f.
-
array.
tolist
()¶ Преобразуйте массив в обычный список с теми же элементами.
-
array.
tounicode
()¶ Преобразование массива в строку юникода. Массив должен быть массивом типа
'u'
; в противном случае выдается сообщениеValueError
. Используйтеarray.tobytes().decode(enc)
для получения юникодовой строки из массива другого типа.
Когда объект массива печатается или преобразуется в строку, он представляется как array(typecode, initializer)
. Инициализатор* опускается, если массив пуст, иначе это строка, если тип-код равен '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])