Skip to main content

8.7. array —数值的有效数组


该模块定义了一个对象类型,可以紧凑地表示一个基本值的数组:字符,整数,浮点数。数组是序列类型,表现得非常像列表,除了存储在它们中的对象的类型是受约束的。在对象创建时通过使用单个字符的 type code 来指定类型。定义了以下类型代码:

类型代码

C类型

Python类型

最小大小(以字节计)

笔记

'b'

签名字符

int

1

 

'B'

无符号字符

int

1

 

'u'

Py_UNICODE

Unicode字符

2

(1)

'h'

签署短

int

2

 

'H'

无符号短

int

2

 

'i'

signed int

int

2

 

'I'

unsigned int

int

2

 

'l'

签名长

int

4

 

'L'

unsigned long

int

4

 

'q'

签署长期

int

8

(2)

'Q'

unsigned long long

int

8

(2)

'f'

浮动

浮动

4

 

'd'

浮动

8

 

笔记:

  1. 'u' 类型代码对应于Python的过时Unicode字符(Py_UNICODEwchar_t)。根据平台,它可以是16位或32位。

    'u' 将与 Py_UNICODE API的其余部分一起删除。

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

  2. 'q''Q' 类型代码仅在用于构建Python的平台C编译器支持C long long 或在Windows上为 __int64 时可用。

    3.3 新版功能.

值的实际表示由机器架构(严格地说,通过C实现)确定。可以通过 itemsize 属性访问实际大小。

模块定义以下类型:

class array.array(typecode[, initializer])

一个新数组,其项目受 typecode 限制,并从可选的 initializer 值初始化,该值必须是列表,bytes-like object 或相应类型的元素的可迭代。

如果给定一个列表或字符串,初始化器被传递到新数组的 fromlist()frombytes()fromunicode() 方法(见下文),以便向数组添加初始项。否则,可迭代初始化器被传递到 extend() 方法。

array.typecodes

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

数组对象支持索引,切片,级联和乘法的常规顺序操作。当使用切片分配时,分配的值必须是具有相同类型代码的数组对象;在所有其他情况下,TypeError 被提出。数组对象也实现缓冲接口,并且可以在支持 字节状对象 的任何地方使用。

还支持以下数据项和方法:

array.typecode

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

array.itemsize

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

array.append(x)

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

array.buffer_info()

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

注解

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

array.byteswap()

“Byteswap”数组的所有项。这仅适用于大小为1,2,4或8个字节的值;对于其他类型的值,RuntimeError 被提出。在从具有不同字节顺序的机器上写入的文件读取数据时非常有用。

array.count(x)

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

array.extend(iterable)

将项目从 iterable 附加到数组的末尾。如果 iterable 是另一个数组,它必须具有相同类型代码的 exactly;如果没有,TypeError 将会提高。如果 iterable 不是数组,那么它必须是可迭代的,并且其元素必须是要附加到数组的正确类型。

array.frombytes(s)

从字符串中追加项目,将字符串解释为机器值数组(就好像它是使用 fromfile() 方法从文件中读取的)。

3.2 新版功能: 为了清楚起见,将 fromstring() 重命名为 frombytes()

array.fromfile(f, n)

file object f 中读取 n 项目(作为机器值),并将它们附加到数组的末尾。如果少于 n 项可用,则会引发 EOFError,但可用的项目仍然插入到数组中。 f 必须是真正的内置文件对象;别的用 read() 方法不会做。

array.fromlist(list)

从列表中追加项目。这相当于 for x in list: a.append(x),除了如果有一个类型错误,数组不变。

array.fromstring()

frombytes() 的已弃用别名。

array.fromunicode(s)

使用给定的unicode字符串中的数据扩展此数组。数组必须是 'u' 类型的数组;否则产生 ValueError。使用 array.frombytes(unicodestring.encode(enc)) 将Unicode数据附加到某个其他类型的数组。

array.index(x)

返回最小的 i,使得 i 是数组中第一次出现的 x 的索引。

array.insert(i, x)

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

array.pop([i])

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

array.remove(x)

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

array.reverse()

反转数组中项目的顺序。

array.tobytes()

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

3.2 新版功能: 为了清楚起见,将 tostring() 重命名为 tobytes()

array.tofile(f)

将所有项目(作为机器值)写入 file object f

array.tolist()

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

array.tostring()

tobytes() 的已弃用别名。

array.tounicode()

将数组转换为unicode字符串。数组必须是 'u' 类型的数组;否则产生 ValueError。使用 array.tobytes().decode(enc) 从某个其他类型的数组获取unicode字符串。

当数组对象被打印或转换为字符串时,它被表示为 array(typecode, initializer)。如果数组为空,则省略 initializer,否则,如果 typecode'u',则为AA,,否则为数字列表。该字符串保证能够使用 eval() 转换回相同类型和值的数组,只要使用 from array import array 导入 array 类。例子:

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

参见

模块 struct

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

模块 xdrlib

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

数值Python文档

Numeric Python扩展(NumPy)定义另一个数组类型;有关数字Python的更多信息,请参阅 http://www.numpy.org/