array — 数值型数组的有效表示


此模块定义了一种对象类型,它可以紧凑地表示基本值的数组:字符、整数、浮点数。数组是序列类型,其行为与列表非常相似,只是存储在其中的对象的类型受到限制。类型在对象创建时通过使用 类型代码 指定,该代码是一个单字符。定义了以下类型代码

类型代码

C 类型

Python 类型

最小字节数

备注

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

wchar_t

Unicode 字符

2

(1)

'h'

signed short

int

2

'H'

unsigned short

int

2

'i'

signed int

int

2

'I'

unsigned int

int

2

'l'

signed long

int

4

'L'

unsigned long

int

4

'q'

signed long long

int

8

'Q'

unsigned long long

int

8

'f'

float

float

4

'd'

double

float

8

备注

  1. 根据平台不同,它可以是 16 位或 32 位。

    版本 3.9 中的变化: array('u') 现在使用 wchar_t 作为 C 类型,而不是已弃用的 Py_UNICODE。此更改不会影响其行为,因为自 Python 3.3 起,Py_UNICODE 就是 wchar_t 的别名。

    自 3.3 版起弃用,将在 4.0 版中移除。

值的实际表示形式由机器体系结构决定(严格来说,由 C 实现决定)。可以通过 array.itemsize 属性访问实际大小。

该模块定义了以下项目

array.typecodes

包含所有可用类型代码的字符串。

该模块定义了以下类型

class array.array(typecode[, initializer])

一个新数组,其项受限于 typecode,并由可选的 initializer 值初始化,该值必须是 bytesbytearray 对象、Unicode 字符串或适当类型元素的可迭代对象。

如果给定 bytesbytearray 对象,则初始化器将传递给新数组的 frombytes() 方法;如果给定 Unicode 字符串,则初始化器将传递给 fromunicode() 方法;否则,初始化器的迭代器将传递给 extend() 方法,以将初始项添加到数组中。

数组对象支持索引、切片、连接和乘法的普通序列操作。使用切片赋值时,赋值必须是具有相同类型代码的数组对象;在所有其他情况下,都会引发 TypeError。数组对象还实现了缓冲区接口,并且可以在支持 类字节对象 的任何地方使用。

引发带有参数 typecodeinitializer审计事件 array.__new__

typecode

用于创建数组的类型代码字符。

itemsize

内部表示中一个数组项的字节长度。

append(x)

将值为 x 的新项追加到数组的末尾。

buffer_info()

返回一个元组 (address, length),给出当前内存地址和用于保存数组内容的缓冲区的元素长度。内存缓冲区的字节大小可以使用 array.buffer_info()[1] * array.itemsize 计算。这在使用需要内存地址的低级(并且本质上不安全)I/O 接口(例如某些 ioctl() 操作)时偶尔有用。只要数组存在并且没有对其应用更改长度的操作,返回的数字就有效。

注意

当使用 C 或 C++ 编写的代码中的数组对象时(这是有效利用此信息的唯一方法),使用数组对象支持的缓冲区接口更有意义。此方法是为了向后兼容性而保留的,在新代码中应避免使用。缓冲区接口记录在 缓冲区协议 中。

byteswap()

对数组的所有项进行“字节交换”。这仅支持大小为 1、2、4 或 8 字节的值;对于其他类型的值,将引发 RuntimeError。从字节顺序不同的机器上写入的文件中读取数据时,这很有用。

count(x)

返回数组中 x 的出现次数。

extend(iterable)

iterable 中的项追加到数组的末尾。如果 iterable 是另一个数组,则它必须具有完全相同的类型代码;否则,将引发 TypeError。如果 iterable 不是数组,则它必须是可迭代的,并且其元素必须是正确的类型才能追加到数组中。

frombytes(buffer)

类字节对象 中追加项,将其内容解释为机器值数组(就像使用 fromfile() 方法从文件中读取一样)。

3.2 版新增: 为了清晰起见,将 fromstring() 重命名为 frombytes()

fromfile(f, n)

文件对象 f 中读取 n 个项目(作为机器值),并将它们追加到数组的末尾。如果可用的项目少于 n 个,则会引发 EOFError,但可用的项目仍然会插入到数组中。

fromlist(list)

追加列表中的项目。这等效于 for x in list: a.append(x),不同之处在于,如果出现类型错误,数组将保持不变。

fromunicode(s)

使用给定的 Unicode 字符串中的数据扩展此数组。数组必须具有类型代码 'u';否则会引发 ValueError。使用 array.frombytes(unicodestring.encode(enc)) 将 Unicode 数据追加到其他类型的数组。

index(x[, start[, stop]])

返回最小的 i,使得 ix 在数组中第一次出现的索引。可以指定可选参数 startstop 以在数组的子部分中搜索 x。如果未找到 x,则引发 ValueError

在 3.10 版更改: 添加了可选的 startstop 参数。

insert(i, x)

在位置 i 之前的数组中插入一个值为 x 的新项目。负值被视为相对于数组的末尾。

pop([i])

从数组中删除索引为 i 的项目并返回它。可选参数默认为 -1,因此默认情况下会删除并返回最后一个项目。

remove(x)

从数组中删除第一次出现的 x

reverse()

反转数组中项目的顺序。

tobytes()

将数组转换为机器值数组,并返回字节表示形式(与 tofile() 方法写入文件的字节序列相同。)

3.2 版新增: 为了清晰起见,tostring() 已重命名为 tobytes()

tofile(f)

将所有项目(作为机器值)写入 文件对象 f

tolist()

将数组转换为具有相同项目的普通列表。

tounicode()

将数组转换为 Unicode 字符串。数组必须具有类型 'u';否则会引发 ValueError。使用 array.tobytes().decode(enc) 从其他类型的数组中获取 Unicode 字符串。

数组对象的字符串表示形式为 array(typecode, initializer)。如果数组为空,则省略 initializer,否则,如果 typecode'u',则它是一个 Unicode 字符串,否则它是一个数字列表。只要使用 from array import array 导入了 array 类,则保证可以使用 eval() 将字符串表示形式转换回具有相同类型和值的数组。如果它包含相应的浮点值,则还必须定义变量 infnan。示例

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

另请参阅

模块 struct

异构二进制数据的打包和解包。

模块 xdrlib

打包和解包某些远程过程调用系统中使用的外部数据表示 (XDR) 数据。

NumPy

NumPy 包定义了另一种数组类型。