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

array.md

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

1> **Источник:** https://python-all.ru/3.3/library/array.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.7. [`array`](https://python-all.ru/3.3/library/array.html#module-array) – Эффективные массивы числовых значений89Этот модуль определяет тип объекта, который может компактно представлять массив базовых значений: символы, целые числа, числа с плавающей запятой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип хранимых в них объектов ограничен. Тип задаётся при создании объекта с помощью *кода типа*, который представляет собой один символ. Определены следующие коды типа:1011| Код типа | Тип C | Тип Python | Минимальный размер в байтах | Примечания |12| --- | --- | --- | --- | --- |13| `'b'` | знаковый char | int | 1 |  |14| `'B'` | беззнаковый char | int | 1 |  |15| `'u'` | Py\_UNICODE | символ Unicode | 2 | (1) |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| `'q'` | знаковый long long | int | 8 | (2) |23| `'Q'` | беззнаковый long long | int | 8 | (2) |24| `'f'` | float | float | 4 |  |25| `'d'` | double | float | 8 |  |2627Примечания:28291. Типовой код `'u'` соответствует устаревшему символу Unicode Python ([`Py_UNICODE`](https://python-all.ru/3.3/c-api/unicode.html#Py_UNICODE), который является `wchar_t`). В зависимости от платформы он может быть 16- или 32-битным.3031   `'u'` будет удалён вместе с остальной частью [`Py_UNICODE`](https://python-all.ru/3.3/c-api/unicode.html#Py_UNICODE) API.3233   Устарело с версии 3.3, будет удалено в версии 4.0.342. Типовые коды `'q'` и `'Q'` доступны, только если компилятор C платформы, используемый для сборки Python, поддерживает C `long long`, или, в Windows, `__int64`.3536   Новое в версии 3.3.3738Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут `itemsize`.3940Модуль определяет следующий тип:4142#### `class array.array(typecode[, initializer])`4344Новый массив, элементы которого ограничены *typecode*, и инициализируется из необязательного значения *initializer*, которое должно быть списком, [*байтоподобным объектом*](https://python-all.ru/3.3/glossary.html#term-bytes-like-object) или итерируемым по элементам соответствующего типа.4546If given a list or string, the initializer is passed to the new array’s [`fromlist()`](https://python-all.ru/3.3/library/array.html#array.array.fromlist), [`frombytes()`](https://python-all.ru/3.3/library/array.html#array.array.frombytes), or [`fromunicode()`](https://python-all.ru/3.3/library/array.html#array.array.fromunicode) method (see below) to add initial items to the array. Otherwise, the iterable initializer is passed to the [`extend()`](https://python-all.ru/3.3/library/array.html#array.array.extend) method.4748#### `array.typecodes`4950Строка со всеми доступными кодами типов.5152Объекты массива поддерживают обычные операции последовательностей: индексацию, срезы, конкатенацию и умножение. При присваивании срезу присваиваемое значение должно быть объектом массива с тем же типовым кодом; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError). Объекты массива также реализуют буферный интерфейс и могут использоваться везде, где поддерживаются [*bytes-like object*](https://python-all.ru/3.3/glossary.html#term-bytes-like-object)s.5354Также поддерживаются следующие элементы данных и методы:5556#### `array.typecode`5758Символ кода типа, использованный для создания массива.5960#### `array.itemsize`6162Длина в байтах одного элемента массива во внутреннем представлении.6364#### `array.append(x)`6566Добавляет новый элемент со значением *x* в конец массива.6768#### `array.buffer_info()`6970Возвращает кортеж `(address, length)`, содержащий текущий адрес памяти и количество элементов в буфере, используемом для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей сути небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, такими как некоторые операции `ioctl()`. Возвращаемые числа действительны до тех пор, пока массив существует и к нему не применяются операции, изменяющие длину.7172> **Примечание**73>74> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости, и его следует избегать в новом коде. Буферный интерфейс описан в [*Протоколе буфера*](https://python-all.ru/3.3/c-api/buffer.html#bufferobjects).7576#### `array.byteswap()`7778«Байт-своп» (перестановка байтов) всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов возбуждается [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError). Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.7980#### `array.count(x)`8182Возвращает количество вхождений *x* в массиве.8384#### `array.extend(iterable)`8586Добавляет элементы из *iterable* в конец массива. Если *iterable* является другим массивом, он должен иметь *точно такой же* типовой код; в противном случае будет возбуждено [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError). Если *iterable* не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.8788#### `array.frombytes(s)`8990Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода [`fromfile()`](https://python-all.ru/3.3/library/array.html#array.array.fromfile)).9192Новое в версии 3.2: [`fromstring()`](https://python-all.ru/3.3/library/array.html#array.array.fromstring) переименован в [`frombytes()`](https://python-all.ru/3.3/library/array.html#array.array.frombytes) для ясности.9394#### `array.fromfile(f, n)`9596Читает *n* элементов (как машинные значения) из [*файлового объекта*](https://python-all.ru/3.3/glossary.html#term-file-object) *f* и добавляет их в конец массива. Если доступно менее *n* элементов, возбуждается [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError), но доступные элементы всё равно вставляются в массив. *f* должен быть реальным встроенным файловым объектом; что-то другое с методом `read()` не подойдёт.9798#### `array.fromlist(list)`99100Добавляет элементы из списка. Аналогично `for x in list: a.append(x)`, за исключением того, что в случае ошибки типа массив остаётся без изменений.101102#### `array.fromstring()`103104Устаревший псевдоним для [`frombytes()`](https://python-all.ru/3.3/library/array.html#array.array.frombytes).105106#### `array.fromunicode(s)`107108Расширяет массив данными из заданной юникодной строки. Массив должен быть типа `'u'`; в противном случае вызывается [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError). Используйте `array.frombytes(unicodestring.encode(enc))` для добавления юникодных данных в массив другого типа.109110#### `array.index(x)`111112Возвращает наименьшее *i*, такое, что *i* является индексом первого вхождения *x* в массиве.113114#### `array.insert(i, x)`115116Вставляет новый элемент со значением *x* в массив перед позицией *i*. Отрицательные значения интерпретируются как смещение от конца массива.117118#### `array.pop([i])`119120Удаляет элемент с индексом *i* из массива и возвращает его. Необязательный аргумент по умолчанию равен `-1`, так что по умолчанию удаляется и возвращается последний элемент.121122#### `array.remove(x)`123124Удаляет первое вхождение *x* из массива.125126#### `array.reverse()`127128Изменяет порядок элементов в массиве на обратный.129130#### `array.tobytes()`131132Преобразует массив в машинное представление и возвращает последовательность байтов (ту же, что была бы записана в файл методом [`tofile()`](https://python-all.ru/3.3/library/array.html#array.array.tofile)).133134Новое в версии 3.2: [`tostring()`](https://python-all.ru/3.3/library/array.html#array.array.tostring) переименован в [`tobytes()`](https://python-all.ru/3.3/library/array.html#array.array.tobytes) для ясности.135136#### `array.tofile(f)`137138Записывает все элементы (как машинные значения) в [*файловый объект*](https://python-all.ru/3.3/glossary.html#term-file-object) *f*.139140#### `array.tolist()`141142Преобразует массив в обычный список с теми же элементами.143144#### `array.tostring()`145146Устаревший псевдоним для [`tobytes()`](https://python-all.ru/3.3/library/array.html#array.array.tobytes).147148#### `array.tounicode()`149150Преобразует массив в юникодную строку. Массив должен быть типа `'u'`; в противном случае вызывается [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError). Используйте `array.tobytes().decode(enc)` для получения юникодной строки из массива другого типа.151152При выводе или преобразовании объекта массива в строку он представляется как `array(typecode, initializer)`. Параметр *initializer* опускается, если массив пуст; в противном случае это строка, если *typecode* равен `'u'`, иначе это список чисел. Гарантируется, что строку можно преобразовать обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/3.3/library/functions.html#eval) при условии, что функция [`array()`](https://python-all.ru/3.3/library/array.html#module-array) была импортирована через `from array import array`. Примеры:153154```python155array('l')156array('u', 'hello \u2641')157array('l', [1, 2, 3, 4, 5])158array('d', [1.0, 2.0, 3.14])159```160161> **См. также**162>163> **Модуль [`struct`](https://python-all.ru/3.3/library/struct.html#module-struct)**164>165> Упаковка и распаковка разнородных двоичных данных.166>167> **Модуль [`xdrlib`](https://python-all.ru/3.3/library/xdrlib.html#module-xdrlib)**168>169> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.170>171> **[Документация Numerical Python](https://python-all.ru/3.3/library/array.html)**172>173> Расширение Numeric Python (NumPy) определяет ещё один тип массива; дополнительную информацию о Numerical Python см. на174>175> [http://www.numpy.org/](https://python-all.ru/3.3/library/array.html)176>177> .178