array
— 数值的高效数组¶
此模块定义了一个对象类型,可以紧凑地表示基本值的数组:字符、整数、浮点数。 数组是序列类型,其行为与列表非常相似,只是存储在其中的对象的类型受到限制。 类型在对象创建时使用类型码指定,类型码是单个字符。 定义了以下类型代码
类型码 |
C 类型 |
Python 类型 |
最小字节大小 |
注释 |
---|---|---|---|---|
|
signed char |
int |
1 |
|
|
unsigned char |
int |
1 |
|
|
wchar_t |
Unicode 字符 |
2 |
(1) |
|
Py_UCS4 |
Unicode 字符 |
4 |
|
|
signed short |
int |
2 |
|
|
unsigned short |
int |
2 |
|
|
signed int |
int |
2 |
|
|
unsigned int |
int |
2 |
|
|
signed long |
int |
4 |
|
|
unsigned long |
int |
4 |
|
|
signed long long |
int |
8 |
|
|
unsigned long long |
int |
8 |
|
|
float |
float |
4 |
|
|
double |
float |
8 |
注释
它可能是 16 位或 32 位,具体取决于平台。
在 3.9 版本中更改:
array('u')
现在使用wchar_t
作为 C 类型,而不是已弃用的Py_UNICODE
。 此更改不会影响其行为,因为自 Python 3.3 以来Py_UNICODE
是wchar_t
的别名。自 3.3 版本弃用,将在 3.16 版本中删除: 请迁移到
'w'
类型码。
值的实际表示形式由机器架构(严格来说,由 C 实现)确定。 实际大小可以通过 array.itemsize
属性访问。
该模块定义了以下项
- array.typecodes¶
一个包含所有可用类型码的字符串。
该模块定义了以下类型
- class array.array(typecode[, initializer])¶
一个新数组,其项受 typecode 限制,并从可选的 initializer 值初始化,该值必须是
bytes
或bytearray
对象、Unicode 字符串或适当类型的元素的可迭代对象。如果给定
bytes
或bytearray
对象,则将初始化程序传递给新数组的frombytes()
方法;如果给定 Unicode 字符串,则将初始化程序传递给fromunicode()
方法;否则,将初始化程序的迭代器传递给extend()
方法,以将初始项添加到数组中。数组对象支持索引、切片、连接和乘法的普通序列操作。 当使用切片赋值时,分配的值必须是具有相同类型代码的数组对象;在所有其他情况下,将引发
TypeError
。 数组对象还实现缓冲区接口,并且可以在支持类字节对象的任何地方使用。使用参数
typecode
、initializer
引发 审计事件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()
。
- fromlist(list)¶
从列表追加元素。 这等效于
for x in list: a.append(x)
,但如果存在类型错误,则数组保持不变。
- fromunicode(s)¶
使用给定的 Unicode 字符串中的数据扩展此数组。 数组的类型代码必须为
'u'
或'w'
; 否则会引发ValueError
。 使用array.frombytes(unicodestring.encode(enc))
将 Unicode 数据追加到其他类型的数组。
- index(x[, start[, stop]])¶
返回最小的 i,使得 i 是 x 在数组中第一次出现的索引。 可以指定可选参数 start 和 stop 来在数组的子部分中搜索 x。 如果未找到 x,则引发
ValueError
。3.10 版本更改: 添加了可选参数 start 和 stop。
- insert(i, x)¶
在数组的位置 i 之前插入一个新项,其值为 x。 负值被视为相对于数组末尾的值。
- pop([i])¶
从数组中删除索引为 i 的项并返回它。 可选参数默认为
-1
,因此默认情况下会删除并返回最后一个项。
- remove(x)¶
从数组中删除第一次出现的 x。
- clear()¶
删除数组中的所有元素。
3.13 版本新增。
- reverse()¶
反转数组中各项的顺序。
- tobytes()¶
将数组转换为机器值的数组,并返回字节表示形式(与
tofile()
方法写入文件的字节序列相同)。3.2 版本新增: 为了更清晰,
tostring()
被重命名为tobytes()
。
- tolist()¶
将数组转换为具有相同项的普通列表。
- tounicode()¶
将数组转换为 Unicode 字符串。数组的类型必须为
'u'
或'w'
; 否则会引发ValueError
。使用array.tobytes().decode(enc)
从其他类型的数组中获取 Unicode 字符串。
数组对象的字符串表示形式为 array(typecode, initializer)
。 如果数组为空,则省略 initializer,否则,如果 typecode 是 'u'
或 'w'
,则它是 Unicode 字符串,否则它是数字列表。只要使用 from array import array
导入了 array
类,就可以保证使用 eval()
将字符串表示形式转换回具有相同类型和值的数组。如果包含相应的浮点值,则还必须定义变量 inf
和 nan
。例子
array('l')
array('w', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])