Spec-Zone.ru › Python 2.7

array — Эффективные массивы числовых значений

Этот модуль определяет тип объекта, который может компактно представлять массив основных значений: символов, целых чисел, чисел с плавающей точкой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип объектов, хранящихся в них, ограничен. Тип задается во время создания объекта с помощью кода типа, который представляет собой один символ. Определены следующие коды типов:

Код типа

Тип C

Тип Python

Минимальный размер в байтах

'c'

char

символ

1

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

Py_UNICODE

символ Юникода

2 (см. примечание)

'h'

signed short

int

2

'H'

unsigned short

int

2

'i'

signed int

int

2

'I'

unsigned int

long

2

'l'

signed long

int

4

'L'

unsigned long

long

4

'f'

float

float

4

'd'

double

float

8

Примечание

Код типа 'u' соответствует символу Юникода Python. В узких сборках Юникода это 2 байта, в широких сборках — 4 байта.

Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут itemsize. Значения, хранящиеся для элементов 'L' и 'I', будут представлены как целые числа Python большого размера при получении, потому что обычный тип целого числа Python не может представить весь диапазон целых чисел C без знака (long).

Модуль определяет следующий тип:

class array.array(typecode[, initializer])

Новый массив, элементы которого ограничены кодом типа, и инициализирован из необязательного значения инициализатора, которое должно быть списком, строкой или итерируемым объектом над элементами соответствующего типа.

Изменено в версии 2.4: Ранее принимались только списки или строки.

Если задан список или строка, инициализатор передается в новый массив методу fromlist(), fromstring() или fromunicode() (см. ниже), чтобы добавить начальные элементы в массив. В противном случае итерируемый инициализатор передается методу extend().

array.ArrayType

Устаревший псевдоним для array.

Объекты массивов поддерживают обычные операции над последовательностями, такие как индексирование, срезы, конкатенацию и умножение. При использовании присваивания срезов присваиваемое значение должно быть объектом массива с тем же кодом типа; во всех остальных случаях возникает TypeError. Объекты массивов также реализуют интерфейс буфера и могут использоваться там, где поддерживаются объекты буфера.

Также поддерживаются следующие данные и методы:

array.typecode

Символ кода типа, используемый для создания массива.

array.itemsize

Длина в байтах одного элемента массива во внутреннем представлении.

array.append(x)

Добавить новый элемент со значением x в конец массива.

array.buffer_info()

Возвращает кортеж (address, length), содержащий текущий адрес памяти и длину в элементах буфера, используемого для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как array.buffer_info()[1] * array.itemsize. Это иногда полезно при работе с низкоуровневыми (и по своей природе небезопасными) интерфейсами ввода-вывода, которые требуют адресов памяти, таких как определенные операции ioctl(). Возвращенные числа действительны до тех пор, пока массив существует и не применяются операции, изменяющие длину.

Примечание

При использовании объектов массивов из кода, написанного на C или C++ (единственный способ эффективного использования этой информации), более целесообразно использовать интерфейс буфера, поддерживаемый объектами массивов. Этот метод сохраняется для обратной совместимости и должен избегаться в новом коде. Интерфейс буфера документирован в Объекты буфера и Memoryview.

array.byteswap()

«Перестановка байтов» всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для других типов значений возникает RuntimeError. Это полезно при чтении данных из файла, написанного на машине с другим порядком байтов.

array.count(x)

Возвращает количество вхождений x в массиве.

array.extend(iterable)

Добавляет элементы из iterable в конец массива. Если iterable — это другой массив, он должен иметь ровно такой же код типа; в противном случае возникает TypeError. Если iterable не является массивом, он должен быть итерируемым, а его элементы должны быть правильного типа, чтобы их можно было добавить в массив.

Изменено в версии 2.4: Ранее аргумент мог быть только другим массивом.

array.fromfile(f, n)

Прочитать n элементов (как машинные значения) из объекта файла f и добавить их в конец массива. Если доступно меньше n элементов, возникает EOFError, но доступные элементы все равно вставляются в массив. f должен быть реальным встроенным объектом файла; что-то другое с методом read() не подойдет.

array.fromlist(list)

Добавить элементы из списка. Это эквивалентно for x in list: a.append(x), за исключением того, что если возникает ошибка типа, массив остается неизменным.

array.fromstring(s)

Добавляет элементы из строки, интерпретируя строку как массив машинных значений (как если бы она была прочитана из файла с помощью метода fromfile()).

array.fromunicode(s)

Расширяет этот массив данными из заданной строки Юникода. Массив должен быть массивом типа 'u'; в противном случае возникает ValueError. Используйте array.fromstring(unicodestring.encode(enc)) для добавления данных Юникода в массив другого типа.

array.index(x)

Возвращает наименьшее i такое, что i является индексом первого вхождения x в массиве.

array.insert(i, x)

Вставить новый элемент со значением x в массив перед позицией i. Отрицательные значения обрабатываются как относительные к концу массива.

array.pop([i])

Удаляет элемент с индексом i из массива и возвращает его. Необязательный аргумент по умолчанию равен -1, так что по умолчанию удаляется и возвращается последний элемент.

array.read(f, n)

Устарело начиная с версии 1.5.1: Используйте метод fromfile().

Прочитать n элементов (как машинные значения) из объекта файла f и добавить их в конец массива. Если доступно меньше n элементов, возникает EOFError, но доступные элементы все равно вставляются в массив. f должен быть реальным встроенным объектом файла; что-то другое с методом read() не подойдет.

array.remove(x)

Удалить первое вхождение x из массива.

array.reverse()

Изменить порядок элементов в массиве.

array.tofile(f)

Записать все элементы (как машинные значения) в объект файла f.

array.tolist()

Преобразовать массив в обычный список с теми же элементами.

END_OF_DOCUMENT_MARKER
array.tostring()

Преобразовать массив в массив машинных значений и вернуть строковое представление (такая же последовательность байтов, которая была бы записана в файл методом tofile()).

array.tounicode()

Преобразовать массив в строку Unicode. Массив должен быть типа 'u' ; в противном случае будет поднято исключение ValueError. Используйте array.tostring().decode(enc) для получения строки Unicode из массива другого типа.

array.write(f)

Устарело начиная с версии 1.5.1: Используйте метод tofile().

Записать все элементы (как машинные значения) в объект файла f.

При выводе объекта массива или его преобразовании в строку, он представлен как array(typecode, initializer). Инициализатор опускается, если массив пуст, иначе это строка, если typecode равен 'c', иначе это список чисел. Гарантируется, что строку можно преобразовать обратно в массив с тем же типом и значением с помощью eval(), при условии, что класс array был импортирован с помощью from array import array. Примеры:

array('l')
array('c', 'hello world')
array('u', u'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])

См. также

Module struct

Упаковку и распаковку разнородных двоичных данных.

Module xdrlib

Упаковку и распаковку данных External Data Representation (XDR), используемых в некоторых системах удаленных процедурных вызовов.

Документация Numerical Python

Расширение Numeric Python (NumPy) определяет другой тип массива; см. http://www.numpy.org/ для получения дополнительной информации о Numerical Python.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/array.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API