On this page
array —有效的数字数组
该模块定义了一个对象类型,该对象类型可以紧凑地表示一个基本值数组:字符,整数,浮点数。数组是序列类型,其行为与列表非常相似,不同之处在于数组中存储的对象类型受到约束。类型是在对象创建时使用类型代码指定的,该代码是单个字符。定义了以下类型代码:
Type code | C Type | Python Type | 最小大小(以字节为单位) | Notes |
---|---|---|---|---|
'b' |
signed char | int | 1 | |
'B' |
unsigned char | int | 1 | |
'u' |
Py_UNICODE | Unicode character | 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' |
长签 | int | 8 | |
'Q' |
无符号长久 | int | 8 | |
'f' |
float | float | 4 | |
'd' |
double | float | 8 |
Notes:
'u'
类型代码对应于 Python 的过时 unicode 字符(Py_UNICODE,即wchar_t
)。根据平台,它可以是 16 位或 32 位。
'u'
将与其他Py_UNICODE API 一起删除。
从版本 3.3 开始不推荐使用,将在版本 4.0 中删除。
值的实际表示形式由机器体系结构(严格来说,由 C 实现)确定。可以passitemsize
属性访问实际大小。
该模块定义以下类型:
-
- class *
array.
array
(* typecode * [,* initializer *])
- 一个新数组,其项受* typecode 限制,并从可选的 initializer *值进行初始化,该值必须是列表,bytes-like object或可在适当类型的元素上迭代。
- class *
如果提供了列表或字符串,则将初始化程序传递给新数组的fromlist(),frombytes()或fromunicode()方法(请参见下文),以将初始项添加到数组。否则,将可迭代的初始值设定项传递给extend()方法。
用参数typecode
,initializer
引发auditing event array.__new__
。
array.
typecodes
- 具有所有可用类型代码的字符串。
数组对象支持索引,切片,串联和乘法的普通序列操作。使用切片分配时,分配的值必须是具有相同类型代码的数组对象;在所有其他情况下,将引发TypeError。数组对象还实现了缓冲区接口,并且可以在支持bytes-like objects的任何地方使用。
还支持以下数据项和方法:
array.
typecode
- 用于创建数组的类型代码字符。
array.
itemsize
- 内部表示形式中一个数组项的长度(以字节为单位)。
array.
append
(* x *)- 将值* x *的新项目追加到数组的末尾。
array.
buffer_info
( )- 返回一个 Tuples
(address, length)
,该 Tuples 给出当前的内存地址以及用于保存数组内容的缓冲区元素的长度。内存缓冲区的大小(以字节为单位)可以计算为array.buffer_info()[1] * array.itemsize
。在使用需要内存地址(例如某些ioctl()
操作)的低级(本质上不安全)的 I/O 接口时,这有时很有用。只要数组存在并且没有对其应用任何长度更改操作,返回的数字都是有效的。
- 返回一个 Tuples
Note
当使用以 C 或 C 编写的代码使用数组对象(有效利用此信息的唯一方法)时,使用数组对象支持的缓冲区接口更有意义。维护此方法是为了实现向后兼容,因此在新代码中应避免使用此方法。缓冲区接口记录在Buffer Protocol中。
array.
byteswap
( )- “ Byteswap”数组的所有项目。只有大小为 1、2、4 或 8 个字节的值才支持此Function。对于其他类型的值,将引发RuntimeError。当从以不同字节 Sequences 写在计算机上的文件中读取数据时,此Function很有用。
array.
count
(* x *)- 返回数组中* x *的出现次数。
array.
extend
(可迭代)- 将项目从* iterable 追加到数组的末尾。如果 iterable 是另一个数组,则它必须完全相同的类型代码;否则,将引发TypeError。如果 iterable *不是数组,则它必须是可迭代的,并且其元素必须是要附加到数组的正确类型。
array.
frombytes
(* s *)- 附加字符串中的项目,将字符串解释为机器值的数组(就像使用fromfile()方法从文件中读取字符串一样)。
3.2 版中的新Function:为清楚起见,fromstring()重命名为frombytes()。
array.
fromfile
(* f , n *)- 从file object * f 中读取 n 个项(作为机器值),并将它们附加到数组的末尾。如果少于 n *个项目可用,则引发EOFError,但是仍然将可用项目插入到数组中。 * f *必须是真实的内置文件对象;使用
read()
方法的其他操作将无法执行。
- 从file object * f 中读取 n 个项(作为机器值),并将它们附加到数组的末尾。如果少于 n *个项目可用,则引发EOFError,但是仍然将可用项目插入到数组中。 * f *必须是真实的内置文件对象;使用
array.
fromlist
(* list *)- 追加列表中的项目。这等效于
for x in list: a.append(x)
,不同之处在于如果存在类型错误,则数组不变。
- 追加列表中的项目。这等效于
array.
fromstring
( )- frombytes()的别名已弃用。
从 3.2 版开始不推荐使用,将在 3.9 版中删除。
array.
fromunicode
(* s *)- 使用给定 unicode 字符串中的数据扩展此数组。该数组必须是
'u'
类型的数组;否则引发ValueError。使用array.frombytes(unicodestring.encode(enc))
将 Unicode 数据附加到其他类型的数组。
- 使用给定 unicode 字符串中的数据扩展此数组。该数组必须是
array.
index
(* x *)- 返回最小的* i ,使得 i 是数组中首次出现的 x *的索引。
array.
insert
(* i , x *)- 在位置* i 之前的数组中插入一个值为 x *的新项目。负值被视为相对于数组末端。
array.
pop
([* i *])- 从数组中删除索引为* i *的项,并将其返回。可选参数默认为
-1
,因此默认情况下将删除并返回最后一项。
- 从数组中删除索引为* i *的项,并将其返回。可选参数默认为
array.
remove
(* x *)- 从数组中删除第一次出现的* x *。
array.
reverse
( )- 颠倒数组中各项的 Sequences。
array.
tobytes
( )- 将数组转换为机器值数组,并返回字节表示形式(与passtofile()方法写入文件的字节序列相同)。
3.2 版中的新Function:为清楚起见,tostring()重命名为tobytes()。
array.
tofile
(* f *)- 将所有项目(作为机器值)写入file object * f *。
array.
tolist
( )- 将数组转换为具有相同项目的普通列表。
array.
tostring
( )- tobytes()的别名已弃用。
从 3.2 版开始不推荐使用,将在 3.9 版中删除。
array.
tounicode
( )- 将数组转换为 unicode 字符串。该数组必须是
'u'
类型的数组;否则引发ValueError。使用array.tobytes().decode(enc)
从其他类型的数组获取 unicode 字符串。
- 将数组转换为 unicode 字符串。该数组必须是
当数组对象被打印或转换为字符串时,它表示为array(typecode, initializer)
。如果数组为空,则Ellipsis* initializer ;否则,如果 typecode *为'u'
,则为字符串;否则为数字列表。只要使用from array import array
导入了array类,就可以保证使用eval()将字符串转换回具有相同类型和值的数组。例子:
array('l')
array('u', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])
See also
Module struct
打包和解压缩异构二进制数据。
Module xdrlib
在某些远程过程调用系统中使用的打包和拆包外部数据表示(XDR)数据。
Numeric Python 扩展(NumPy)定义了另一种数组类型。有关数值 Python 的更多信息,请参见http://www.numpy.org/。