Документация Python неофициальный перевод

array.md

293 строк · 14.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.1/library/array.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.6. `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> **Примечание**26>27> Типовой код `'u'` соответствует символу Unicode в Python. В узких сборках Unicode он занимает 2 байта, в широких – 4 байта.2829Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией на C). Реальный размер можно получить через атрибут [`itemsize`](https://python-all.ru/3.1/c-api/buffer.html#itemsize).3031Модуль определяет следующий тип:3233#### `class array.array(typecode[, initializer])`3435Новый массив, элементы которого ограничены *типовым кодом*, и инициализируется из необязательного значения *инициализатора*, которое должно быть списком, объектом, поддерживающим интерфейс буфера, или итерируемым объектом, содержащим элементы подходящего типа.3637Если передан список или строка, инициализатор передаётся методу [`fromlist()`](https://python-all.ru/3.1/library/array.html#array.array.fromlist), [`fromstring()`](https://python-all.ru/3.1/library/array.html#array.array.fromstring) или [`fromunicode()`](https://python-all.ru/3.1/library/array.html#array.array.fromunicode) нового массива (см. ниже) для добавления начальных элементов. В противном случае итерируемый инициализатор передаётся методу [`extend()`](https://python-all.ru/3.1/library/array.html#array.array.extend).3839#### `array.typecodes`4041Строка со всеми доступными кодами типов.4243Объекты array поддерживают обычные операции последовательностей: индексацию, срезы, конкатенацию и умножение. При использовании присваивания срезу присваиваемое значение должно быть объектом array с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError). Объекты array также реализуют интерфейс буфера и могут использоваться везде, где поддерживаются буферные объекты.4445Также поддерживаются следующие элементы данных и методы:4647#### `array.typecode`4849Символ кода типа, использованный для создания массива.5051#### `array.itemsize`5253Длина в байтах одного элемента массива во внутреннем представлении.5455#### `array.append(x)`5657Добавляет новый элемент со значением5859*x*6061в конец массива.6263#### `array.buffer_info()`6465Возвращает кортеж `(address, length)`, содержащий текущий адрес памяти и количество элементов в буфере, используемом для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей сути небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, такими как некоторые операции `ioctl()`. Возвращаемые числа действительны до тех пор, пока массив существует и к нему не применяются операции, изменяющие длину.6667> **Примечание**68>69> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости, и его следует избегать в новом коде. Буферный интерфейс описан в [*Протоколе буфера*](https://python-all.ru/3.1/c-api/buffer.html#bufferobjects).7071#### `array.byteswap()`7273«Байт-своп» (перестановка байтов) всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов возбуждается7475[`RuntimeError`](https://python-all.ru/3.1/library/exceptions.html#RuntimeError)7677. Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.7879#### `array.count(x)`8081Возвращает количество вхождений8283*x*8485в массиве.8687#### `array.extend(iterable)`8889Добавляет элементы из9091*iterable*9293в конец массива. Если9495*iterable*9697является другим массивом, он должен иметь9899*точно такой же*100101типовой код; в противном случае будет возбуждено102103[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)104105. Если106107*iterable*108109не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.110111#### `array.fromfile(f, n)`112113Читает114115*n*116117элементов (как машинные значения) из118119[*файлового объекта*](https://python-all.ru/3.1/glossary.html#term-file-object)120121*f*122123и добавляет их в конец массива. Если доступно менее124125*n*126127элементов, возбуждается128129[`EOFError`](https://python-all.ru/3.1/library/exceptions.html#EOFError)130131, но доступные элементы всё равно вставляются в массив.132133*f*134135должен быть реальным встроенным файловым объектом; что-то другое с методом136137`read()`138139не подойдёт.140141#### `array.fromlist(list)`142143Добавляет элементы из списка. Аналогично144145`for x in list: a.append(x)`146147, за исключением того, что в случае ошибки типа массив остаётся без изменений.148149#### `array.fromstring(s)`150151Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода152153[`fromfile()`](https://python-all.ru/3.1/library/array.html#array.array.fromfile)154155).156157#### `array.fromunicode(s)`158159Расширяет этот массив данными из указанной строки Unicode. Массив должен быть типа160161`'u'`162163; в противном случае возбуждается164165[`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError)166167. Используйте168169`array.fromstring(unicodestring.encode(enc))`170171, чтобы добавить данные Unicode в массив другого типа.172173#### `array.index(x)`174175Возвращает наименьшее176177*i*178179, такое, что180181*i*182183является индексом первого вхождения184185*x*186187в массиве.188189#### `array.insert(i, x)`190191Вставляет новый элемент со значением192193*x*194195в массив перед позицией196197*i*198199. Отрицательные значения интерпретируются как смещение от конца массива.200201#### `array.pop([i])`202203Удаляет элемент с индексом204205*i*206207из массива и возвращает его. Необязательный аргумент по умолчанию равен208209`-1`210211, так что по умолчанию удаляется и возвращается последний элемент.212213#### `array.remove(x)`214215Удаляет первое вхождение216217*x*218219из массива.220221#### `array.reverse()`222223Изменяет порядок элементов в массиве на обратный.224225#### `array.tofile(f)`226227Записывает все элементы (как машинные значения) в228229[*файловый объект*](https://python-all.ru/3.1/glossary.html#term-file-object)230231*f*232233.234235#### `array.tolist()`236237Преобразует массив в обычный список с теми же элементами.238239#### `array.tostring()`240241Преобразует массив в машинные значения и возвращает строковое представление (ту же последовательность байтов, которая была бы записана в файл методом242243[`tofile()`](https://python-all.ru/3.1/library/array.html#array.array.tofile)244245).246247#### `array.tounicode()`248249Преобразует массив в строку Unicode. Массив должен быть типа250251`'u'`252253; в противном случае возбуждается254255[`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError)256257. Используйте258259`array.tostring().decode(enc)`260261, чтобы получить строку Unicode из массива другого типа.262263При выводе или преобразовании объекта массива в строку он представляется как `array(typecode, initializer)`. Параметр *initializer* опускается, если массив пуст; в противном случае это строка, если *typecode* равен `'u'`, иначе это список чисел. Гарантируется, что строку можно преобразовать обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/3.1/library/functions.html#eval) при условии, что функция [`array()`](https://python-all.ru/3.1/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.1/library/struct.html#module-struct)**275>276> Упаковка и распаковка разнородных двоичных данных.277>278> **Модуль [`xdrlib`](https://python-all.ru/3.1/library/xdrlib.html#module-xdrlib)**279>280> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.281>282> **[Руководство по Numerical Python](https://python-all.ru/3.1/library/array.html)**283>284> Расширение Numeric Python (NumPy) определяет другой тип массива; см.285>286> [http://numpy.sourceforge.net/](https://python-all.ru/3.1/library/array.html)287>288> для получения дополнительной информации о Numerical Python. (PDF-версия руководства NumPy доступна по адресу289>290> [http://numpy.sourceforge.net/numdoc/numdoc.pdf](https://python-all.ru/3.1/library/array.html)291>292> ).293