array.md · Markdown – Документация Python
Документация Python неофициальный перевод

array.md

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

1> **Источник:** https://python-all.ru/2.7/library/array.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.6. [`array`](https://python-all.ru/2.7/library/array.html#module-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`. Значения, хранящиеся для элементов `'L'` и `'I'`, при извлечении будут представлены как длинные целые числа Python, поскольку обычный целочисленный тип Python не может охватить весь диапазон беззнаковых (длинных) целых чисел C.3132Модуль определяет следующий тип:3334#### `class array.array(typecode[, initializer])`3536Новый массив, элементы которого ограничены кодом типа *typecode* и инициализируются из необязательного значения *initializer*, которое должно быть списком, строкой или итерируемым объектом, содержащим элементы подходящего типа.3738Изменено в версии 2.4: Ранее принимались только списки или строки.3940Если указан список или строка, инициализатор передается методу [`fromlist()`](https://python-all.ru/2.7/library/array.html#array.array.fromlist), [`fromstring()`](https://python-all.ru/2.7/library/array.html#array.array.fromstring) или [`fromunicode()`](https://python-all.ru/2.7/library/array.html#array.array.fromunicode) нового массива (см. ниже) для добавления начальных элементов в массив. В противном случае итерируемый инициализатор передается методу [`extend()`](https://python-all.ru/2.7/library/array.html#array.array.extend).4142#### `array.ArrayType`4344Устаревший псевдоним для [`array`](https://python-all.ru/2.7/library/array.html#array.array).4546Объекты массивов поддерживают обычные операции последовательностей: индексирование, срезы, конкатенацию и умножение. При использовании присваивания срезу присваиваемое значение должно быть объектом массива с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError). Объекты массивов также реализуют буферный интерфейс и могут использоваться везде, где поддерживаются буферные объекты.4748Также поддерживаются следующие элементы данных и методы:4950#### `array.typecode`5152Символ кода типа, использованный для создания массива.5354#### `array.itemsize`5556Длина в байтах одного элемента массива во внутреннем представлении.5758#### `array.append(x)`5960Добавляет новый элемент со значением *x* в конец массива.6162#### `array.buffer_info()`6364Возвращает кортеж `(address, length)`, содержащий текущий адрес памяти и длину в элементах буфера, используемого для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей природе небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, такими как некоторые операции `ioctl()`. Возвращаемые числа действительны, пока существует массив и к нему не применяются операции, изменяющие длину.6566> **Примечание**67>68> При использовании объектов массивов из кода на C или C++ (единственный способ эффективно использовать эту информацию) имеет больше смысла применять буферный интерфейс, поддерживаемый объектами массивов. Этот метод сохраняется для обратной совместимости, и его следует избегать в новом коде. Буферный интерфейс описан в [Buffers and Memoryview Objects](https://python-all.ru/2.7/c-api/buffer.html#bufferobjects).6970#### `array.byteswap()`7172“Byteswap” все элементы массива. Поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов вызывается исключение [`RuntimeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.RuntimeError). Полезно при чтении данных из файла, созданного на машине с другим порядком байт.7374#### `array.count(x)`7576Возвращает количество вхождений *x* в массиве.7778#### `array.extend(iterable)`7980Добавляет элементы из *iterable* в конец массива. Если *iterable* – другой массив, он должен иметь *точно такой же* код типа; в противном случае будет возбуждено [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError). Если *iterable* не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.8182Изменено в версии 2.4: Ранее аргументом мог быть только другой массив.8384#### `array.fromfile(f, n)`8586Читает *n* элементов (как машинные значения) из файлового объекта *f* и добавляет их в конец массива. Если доступно менее *n* элементов, возбуждается [`EOFError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.EOFError), но доступные элементы всё равно вставляются в массив. *f* должен быть настоящим встроенным файловым объектом; что-то другое с методом [`read()`](https://python-all.ru/2.7/library/array.html#array.array.read) не подойдёт.8788#### `array.fromlist(list)`8990Добавляет элементы из списка. Эквивалентно `for x in list: a.append(x)`, за исключением того, что в случае ошибки типа массив остаётся неизменным.9192#### `array.fromstring(s)`9394Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода [`fromfile()`](https://python-all.ru/2.7/library/array.html#array.array.fromfile)).9596#### `array.fromunicode(s)`9798Расширяет этот массив данными из заданной строки Unicode. Массив должен быть типа `'u'`; в противном случае возникает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError). Используйте `array.fromstring(unicodestring.encode(enc))` для добавления данных Unicode в массив другого типа.99100#### `array.index(x)`101102Возвращает наименьшее *i*, такое, что *i* является индексом первого вхождения *x* в массиве.103104#### `array.insert(i, x)`105106Вставляет новый элемент со значением *x* в массив перед позицией *i*. Отрицательные значения интерпретируются как смещение от конца массива.107108#### `array.pop([i])`109110Удаляет элемент с индексом *i* из массива и возвращает его. Необязательный аргумент по умолчанию равен `-1`, так что по умолчанию удаляется и возвращается последний элемент.111112#### `array.read(f, n)`113114Устарело с версии 1.5.1: Используйте метод [`fromfile()`](https://python-all.ru/2.7/library/array.html#array.array.fromfile).115116Читает *n* элементов (как машинные значения) из файлового объекта *f* и добавляет их в конец массива. Если доступно менее *n* элементов, возбуждается [`EOFError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.EOFError), но доступные элементы всё равно вставляются в массив. *f* должен быть настоящим встроенным файловым объектом; что-то другое с методом [`read()`](https://python-all.ru/2.7/library/array.html#array.array.read) не подойдёт.117118#### `array.remove(x)`119120Удаляет первое вхождение *x* из массива.121122#### `array.reverse()`123124Изменяет порядок элементов в массиве на обратный.125126#### `array.tofile(f)`127128Записывает все элементы (в машинном представлении) в файловый объект *f*.129130#### `array.tolist()`131132Преобразует массив в обычный список с теми же элементами.133134#### `array.tostring()`135136Преобразует массив в массив машинных значений и возвращает строковое представление (ту же последовательность байтов, которая была бы записана в файл методом [`tofile()`](https://python-all.ru/2.7/library/array.html#array.array.tofile)).137138#### `array.tounicode()`139140Преобразует массив в строку Unicode. Массив должен быть типа `'u'`; в противном случае возникает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError). Используйте `array.tostring().decode(enc)` для получения строки Unicode из массива другого типа.141142#### `array.write(f)`143144Устарело с версии 1.5.1: Используйте метод [`tofile()`](https://python-all.ru/2.7/library/array.html#array.array.tofile).145146Записывает все элементы (в машинном представлении) в файловый объект *f*.147148Когда объект массива выводится или преобразуется в строку, он представляется как `array(typecode, initializer)`. Параметр *initializer* опускается, если массив пуст, в противном случае это строка, если *typecode* равен `'c'`, иначе это список чисел. Строка гарантированно может быть преобразована обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/2.7/library/functions.html#eval), при условии, что класс [`array`](https://python-all.ru/2.7/library/array.html#array.array) был импортирован с помощью `from array import array`. Примеры:149150```python151array('l')152array('c', 'hello world')153array('u', u'hello \u2641')154array('l', [1, 2, 3, 4, 5])155array('d', [1.0, 2.0, 3.14])156```157158> **См. также**159>160> **Модуль [`struct`](https://python-all.ru/2.7/library/struct.html#module-struct)**161>162> Упаковка и распаковка разнородных двоичных данных.163>164> **Модуль [`xdrlib`](https://python-all.ru/2.7/library/xdrlib.html#module-xdrlib)**165>166> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.167>168> **[Документация Numerical Python](https://python-all.ru/2.7/library/array.html)**169>170> Расширение Numeric Python (NumPy) определяет ещё один тип массива; дополнительную информацию о Numerical Python см. на [http://www.numpy.org/](https://python-all.ru/2.7/library/array.html).171