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

array.md

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

1> **Источник:** https://python-all.ru/2.6/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| `'c'` | char | символ | 1 |14| `'b'` | знаковый char | int | 1 |15| `'B'` | беззнаковый char | int | 1 |16| `'u'` | Py\_UNICODE | символ Unicode | 2 (см. примечание) |17| `'h'` | знаковый short | int | 2 |18| `'H'` | беззнаковый short | int | 2 |19| `'i'` | знаковый int | int | 2 |20| `'I'` | беззнаковый int | long | 2 |21| `'l'` | знаковый long | int | 4 |22| `'L'` | беззнаковый long | long | 4 |23| `'f'` | float | float | 4 |24| `'d'` | double | float | 8 |2526> **Примечание**27>28> Типовой код `'u'` соответствует символу Unicode в Python. В узких сборках Unicode он занимает 2 байта, в широких – 4 байта.2930Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут [`itemsize`](https://python-all.ru/2.6/c-api/buffer.html#itemsize). Значения, хранящиеся для элементов `'L'` и `'I'`, при извлечении будут представлены как Python long integers, поскольку обычный целочисленный тип Python не может охватить весь диапазон беззнаковых (long) целых чисел в C.3132Модуль определяет следующий тип:3334#### `class array.array(typecode[, initializer])`3536Новый массив, элементы которого ограничены кодом типа *typecode* и инициализируются из необязательного значения *initializer*, которое должно быть списком, строкой или итерируемым объектом, содержащим элементы подходящего типа.3738Изменено в версии 2.4: Ранее принимались только списки или строки.3940Если передан список или строка, инициализатор передаётся методу [`fromlist()`](https://python-all.ru/2.6/library/array.html#array.array.fromlist), [`fromstring()`](https://python-all.ru/2.6/library/array.html#array.array.fromstring) или [`fromunicode()`](https://python-all.ru/2.6/library/array.html#array.array.fromunicode) нового массива (см. ниже) для добавления начальных элементов. В противном случае итерируемый инициализатор передаётся методу [`extend()`](https://python-all.ru/2.6/library/array.html#array.array.extend).4142#### `array.ArrayType`4344Устаревший псевдоним для4546[`array`](https://python-all.ru/2.6/library/array.html#array.array)4748.4950Объекты array поддерживают обычные операции последовательностей: индексацию, срезы, конкатенацию и умножение. При использовании присваивания срезу присваиваемое значение должно быть объектом array с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError). Объекты array также реализуют интерфейс буфера и могут использоваться везде, где поддерживаются буферные объекты.5152Также поддерживаются следующие элементы данных и методы:5354#### `array.typecode`5556Символ кода типа, использованный для создания массива.5758#### `array.itemsize`5960Длина в байтах одного элемента массива во внутреннем представлении.6162#### `array.append(x)`6364Добавляет новый элемент со значением6566*x*6768в конец массива.6970#### `array.buffer_info()`7172Возвращает кортеж `(address, length)`, содержащий текущий адрес памяти и количество элементов в буфере, используемом для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей сути небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, такими как некоторые операции `ioctl()`. Возвращаемые числа действительны до тех пор, пока массив существует и к нему не применяются операции, изменяющие длину.7374> **Примечание**75>76> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости и не должен использоваться в новом коде. Буферный интерфейс описан в [*Buffer Objects*](https://python-all.ru/2.6/c-api/buffer.html#bufferobjects).7778#### `array.byteswap()`7980«Байт-своп» (перестановка байтов) всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов возбуждается8182[`RuntimeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.RuntimeError)8384. Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.8586#### `array.count(x)`8788Возвращает количество вхождений8990*x*9192в массиве.9394#### `array.extend(iterable)`9596Добавляет элементы из *iterable* в конец массива. Если *iterable* является другим массивом, он должен иметь *точно такой же* типовой код; в противном случае будет возбуждено [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError). Если *iterable* не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.9798Изменено в версии 2.4: Ранее аргументом мог быть только другой массив.99100#### `array.fromfile(f, n)`101102Читает103104*n*105106элементов (как машинные значения) из файлового объекта107108*f*109110и добавляет их в конец массива. Если доступно меньше111112*n*113114элементов, возбуждается115116[`EOFError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.EOFError)117118, но уже прочитанные элементы всё равно вставляются в массив.119120*f*121122должен быть настоящим встроенным файловым объектом; объект, у которого есть только метод123124[`read()`](https://python-all.ru/2.6/library/array.html#array.array.read)125126, не подойдёт.127128#### `array.fromlist(list)`129130Добавляет элементы из списка. Аналогично131132`for x in list: a.append(x)`133134, за исключением того, что в случае ошибки типа массив остаётся без изменений.135136#### `array.fromstring(s)`137138Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода139140[`fromfile()`](https://python-all.ru/2.6/library/array.html#array.array.fromfile)141142).143144#### `array.fromunicode(s)`145146Расширяет этот массив данными из указанной строки Unicode. Массив должен быть типа147148`'u'`149150; в противном случае возбуждается151152[`ValueError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.ValueError)153154. Используйте155156`array.fromstring(unicodestring.encode(enc))`157158, чтобы добавить данные Unicode в массив другого типа.159160#### `array.index(x)`161162Возвращает наименьшее163164*i*165166, такое, что167168*i*169170является индексом первого вхождения171172*x*173174в массиве.175176#### `array.insert(i, x)`177178Вставляет новый элемент со значением179180*x*181182в массив перед позицией183184*i*185186. Отрицательные значения интерпретируются как смещение от конца массива.187188#### `array.pop([i])`189190Удаляет элемент с индексом191192*i*193194из массива и возвращает его. Необязательный аргумент по умолчанию равен195196`-1`197198, так что по умолчанию удаляется и возвращается последний элемент.199200#### `array.read(f, n)`201202Устарело с версии 1.5.1: Используйте метод [`fromfile()`](https://python-all.ru/2.6/library/array.html#array.array.fromfile).203204Читает *n* элементов (как машинные значения) из файлового объекта *f* и добавляет их в конец массива. Если доступно меньше *n* элементов, возбуждается [`EOFError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.EOFError), но уже прочитанные элементы всё равно вставляются в массив. *f* должен быть настоящим встроенным файловым объектом; объект, у которого есть только метод [`read()`](https://python-all.ru/2.6/library/array.html#array.array.read), не подойдёт.205206#### `array.remove(x)`207208Удаляет первое вхождение209210*x*211212из массива.213214#### `array.reverse()`215216Изменяет порядок элементов в массиве на обратный.217218#### `array.tofile(f)`219220Записывает все элементы (в машинном представлении) в файловый объект221222*f*223224.225226#### `array.tolist()`227228Преобразует массив в обычный список с теми же элементами.229230#### `array.tostring()`231232Преобразует массив в машинные значения и возвращает строковое представление (ту же последовательность байтов, которая была бы записана в файл методом233234[`tofile()`](https://python-all.ru/2.6/library/array.html#array.array.tofile)235236).237238#### `array.tounicode()`239240Преобразует массив в строку Unicode. Массив должен быть типа241242`'u'`243244; в противном случае возбуждается245246[`ValueError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.ValueError)247248. Используйте249250`array.tostring().decode(enc)`251252, чтобы получить строку Unicode из массива другого типа.253254#### `array.write(f)`255256Устарело с версии 1.5.1: Используйте метод [`tofile()`](https://python-all.ru/2.6/library/array.html#array.array.tofile).257258Записывает все элементы (в машинном представлении) в файловый объект *f*.259260Когда объект массива выводится на печать или преобразуется в строку, он представляется как `array(typecode, initializer)`. Аргумент *initializer* опускается, если массив пуст; в противном случае это строка, если *typecode* равен `'c'`, иначе это список чисел. Гарантируется, что полученную строку можно преобразовать обратно в массив того же типа и с теми же значениями с помощью [`eval()`](https://python-all.ru/2.6/library/functions.html#eval), при условии, что функция [`array()`](https://python-all.ru/2.6/library/array.html#array.array) была импортирована с помощью `from array import array`. Примеры:261262```python263array('l')264array('c', 'hello world')265array('u', u'hello \u2641')266array('l', [1, 2, 3, 4, 5])267array('d', [1.0, 2.0, 3.14])268```269270> **См. также**271>272> **Модуль [`struct`](https://python-all.ru/2.6/library/struct.html#module-struct)**273>274> Упаковка и распаковка разнородных двоичных данных.275>276> **Модуль [`xdrlib`](https://python-all.ru/2.6/library/xdrlib.html#module-xdrlib)**277>278> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.279>280> **[Руководство по Numerical Python](https://python-all.ru/2.6/library/array.html)**281>282> Расширение Numeric Python (NumPy) определяет другой тип массива; см.283>284> [http://numpy.sourceforge.net/](https://python-all.ru/2.6/library/array.html)285>286> для получения дополнительной информации о Numerical Python. (PDF-версия руководства NumPy доступна по адресу287>288> [http://numpy.sourceforge.net/numdoc/numdoc.pdf](https://python-all.ru/2.6/library/array.html)289>290> ).291