array.md
1> **Источник:** https://python-all.ru/3.0/library/array.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `array` – эффективные массивы числовых значений89Этот модуль определяет тип объекта, который может компактно представлять массив базовых значений: символы, целые числа, числа с плавающей запятой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип хранимых в них объектов ограничен. Тип задаётся при создании объекта с помощью *кода типа*, который представляет собой один символ. Определены следующие коды типа:1011| Код типа | Тип C | Тип Python | Минимальный размер в байтах |12| --- | --- | --- | --- |13| `'b'` | знаковый char | int | 1 |14| `'B'` | беззнаковый char | int | 1 |15| `'u'` | Py\_UNICODE | символ Unicode | 2 |16| `'h'` | знаковый short | int | 2 |17| `'H'` | беззнаковый short | int | 2 |18| `'i'` | знаковый int | int | 2 |19| `'I'` | беззнаковый int | int | 2 |20| `'l'` | знаковый long | int | 4 |21| `'L'` | беззнаковый long | int | 4 |22| `'f'` | float | float | 4 |23| `'d'` | double | float | 8 |2425Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией на C). Реальный размер можно получить через атрибут [`itemsize`](https://python-all.ru/3.0/c-api/buffer.html#itemsize).2627Модуль определяет следующий тип:2829#### `[array.array]array.array(typecode[, initializer])`3031Возвращает новый массив, элементы которого ограничены *typecode* и инициализируются из необязательного значения *initializer*, которое должно быть списком, объектом, поддерживающим буферный интерфейс, или итерабельным объектом по элементам соответствующего типа.3233Если указан список или строка, начальное значение передаётся методу `fromlist()`, `fromstring()` или `fromunicode()` (см. ниже), чтобы добавить начальные элементы в массив. В противном случае итерабельное начальное значение передаётся методу `extend()`.3435#### `[array.ArrayType]array.ArrayType`3637Устаревший псевдоним для3839[`array()`](https://python-all.ru/3.0/library/array.html#array.array)4041.4243#### `[array.typecodes]array.typecodes`4445Строка со всеми доступными кодами типов.4647Объекты array поддерживают обычные операции последовательностей: индексацию, срезы, конкатенацию и умножение. При использовании присваивания срезу присваиваемое значение должно быть объектом array с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError). Объекты array также реализуют интерфейс буфера и могут использоваться везде, где поддерживаются буферные объекты.4849Также поддерживаются следующие элементы данных и методы:5051#### `[array.array.typecode]array.typecode`5253Символ кода типа, использованный для создания массива.5455#### `[array.array.itemsize]array.itemsize`5657Длина в байтах одного элемента массива во внутреннем представлении.5859#### `[array.array.append]array.append(x)`6061Добавляет новый элемент со значением6263*x*6465в конец массива.6667#### `[array.array.buffer_info]array.buffer_info()`6869Возвращает кортеж `(адрес, длина)`, содержащий текущий адрес в памяти и количество элементов в буфере, используемом для хранения содержимого массива. Размер буфера в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей сути небезопасными) интерфейсами ввода-вывода, которые требуют адреса памяти, например, определённые операции `ioctl`. Возвращаемые числа действительны, пока существует массив и к нему не применяются операции, изменяющие длину.7071> **Примечание**72>73> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости и не должен использоваться в новом коде. Буферный интерфейс описан в [*Buffer Objects*](https://python-all.ru/3.0/c-api/buffer.html#bufferobjects).7475#### `[array.array.byteswap]array.byteswap()`7677«Байт-своп» (перестановка байтов) всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов возбуждается7879[`RuntimeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.RuntimeError)8081. Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.8283#### `[array.array.count]array.count(x)`8485Возвращает количество вхождений8687*x*8889в массиве.9091#### `[array.array.extend]array.extend(iterable)`9293Добавляет элементы из9495*iterable*9697в конец массива. Если9899*iterable*100101является другим массивом, он должен иметь102103*точно такой же*104105типовой код; в противном случае будет возбуждено106107[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)108109. Если110111*iterable*112113не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.114115#### `[array.array.fromfile]array.fromfile(f, n)`116117Читает118119*n*120121элементов (в машинном представлении) из файлового объекта122123*f*124125и добавляет их в конец массива. Если доступно меньше126127*n*128129элементов, возбуждается130131[`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError)132133, но доступные элементы всё равно вставляются в массив.134135*f*136137должен быть реальным встроенным файловым объектом; что-то другое с138139`read()`140141методом не подойдёт.142143#### `[array.array.fromlist]array.fromlist(list)`144145Добавляет элементы из списка. Аналогично146147`for x in list: a.append(x)`148149, за исключением того, что в случае ошибки типа массив остаётся без изменений.150151#### `[array.array.fromstring]array.fromstring(s)`152153Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода154155[`fromfile()`](https://python-all.ru/3.0/library/array.html#array.array.fromfile)156157).158159#### `[array.array.fromunicode]array.fromunicode(s)`160161Расширяет этот массив данными из указанной строки Unicode. Массив должен быть типа162163`'u'`164165; в противном случае возбуждается166167[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)168169. Используйте170171`array.fromstring(unicodestring.encode(enc))`172173, чтобы добавить данные Unicode в массив другого типа.174175#### `[array.array.index]array.index(x)`176177Возвращает наименьшее178179*i*180181, такое, что182183*i*184185является индексом первого вхождения186187*x*188189в массиве.190191#### `[array.array.insert]array.insert(i, x)`192193Вставляет новый элемент со значением194195*x*196197в массив перед позицией198199*i*200201. Отрицательные значения интерпретируются как смещение от конца массива.202203#### `[array.array.pop]array.pop([i])`204205Удаляет элемент с индексом206207*i*208209из массива и возвращает его. Необязательный аргумент по умолчанию равен210211`-1`212213, так что по умолчанию удаляется и возвращается последний элемент.214215#### `[array.array.remove]array.remove(x)`216217Удаляет первое вхождение218219*x*220221из массива.222223#### `[array.array.reverse]array.reverse()`224225Изменяет порядок элементов в массиве на обратный.226227#### `[array.array.tofile]array.tofile(f)`228229Записывает все элементы (в машинном представлении) в файловый объект230231*f*232233.234235#### `[array.array.tolist]array.tolist()`236237Преобразует массив в обычный список с теми же элементами.238239#### `[array.array.tostring]array.tostring()`240241Преобразует массив в машинные значения и возвращает строковое представление (ту же последовательность байтов, которая была бы записана в файл методом242243[`tofile()`](https://python-all.ru/3.0/library/array.html#array.array.tofile)244245).246247#### `[array.array.tounicode]array.tounicode()`248249Преобразует массив в строку Unicode. Массив должен быть типа250251`'u'`252253; в противном случае возбуждается254255[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)256257. Используйте258259`array.tostring().decode(enc)`260261, чтобы получить строку Unicode из массива другого типа.262263При выводе или преобразовании объекта массива в строку он представляется как `array(typecode, initializer)`. Параметр *initializer* опускается, если массив пуст; в противном случае это строка, если *typecode* равен `'u'`, иначе это список чисел. Гарантируется, что строку можно преобразовать обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/3.0/library/functions.html#eval) при условии, что функция [`array()`](https://python-all.ru/3.0/library/array.html#array.array) была импортирована через `from array import array`. Примеры:264265```python266array('l')267array('u', 'hello \u2641')268array('l', [1, 2, 3, 4, 5])269array('d', [1.0, 2.0, 3.14])270```271272> **См. также**273>274> **Модуль [`struct`](https://python-all.ru/3.0/library/struct.html#module-struct)**275>276> Упаковка и распаковка разнородных двоичных данных.277>278> **Модуль [`xdrlib`](https://python-all.ru/3.0/library/xdrlib.html#module-xdrlib)**279>280> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.281>282> **[Руководство по Numerical Python](https://python-all.ru/3.0/library/array.html)**283>284> Расширение Numeric Python (NumPy) определяет другой тип массива; см.285>286> [http://numpy.sourceforge.net/](https://python-all.ru/3.0/library/array.html)287>288> для получения дополнительной информации о Numerical Python. (PDF-версия руководства NumPy доступна по адресу289>290> [http://numpy.sourceforge.net/numdoc/numdoc.pdf](https://python-all.ru/3.0/library/array.html)291>292> ).293