array —有效的数字数组


该模块定义了一个对象类型,该对象类型可以紧凑地表示一个基本值数组:字符,整数,浮点数。数组是序列类型,其行为与列表非常相似,不同之处在于数组中存储的对象类型受到约束。类型是在对象创建时使用类型代码指定的,该代码是单个字符。定义了以下类型代码:

Type codeC TypePython Type最小大小(以字节为单位)Notes
'b'signed charint1
'B'unsigned charint1
'u'Py_UNICODEUnicode character2(1)
'h'signed shortint2
'H'unsigned shortint2
'i'signed intint2
'I'unsigned intint2
'l'signed longint4
'L'unsigned longint4
'q'长签int8
'Q'无符号长久int8
'f'floatfloat4
'd'doublefloat8

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或可在适当类型的元素上迭代。

如果提供了列表或字符串,则将初始化程序传递给新数组的fromlist()frombytes()fromunicode()方法(请参见下文),以将初始项添加到数组。否则,将可迭代的初始值设定项传递给extend()方法。

用参数typecodeinitializer引发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 接口时,这有时很有用。只要数组存在并且没有对其应用任何长度更改操作,返回的数字都是有效的。

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()方法的其他操作将无法执行。
  • array. fromlist(* list *)

    • 追加列表中的项目。这等效于for x in list: a.append(x),不同之处在于如果存在类型错误,则数组不变。
  • array. fromstring ( )

从 3.2 版开始不推荐使用,将在 3.9 版中删除。

  • 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 ( )

    • 颠倒数组中各项的 Sequences。
  • array. tobytes ( )

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

3.2 版中的新Function:为清楚起见,tostring()重命名为tobytes()

  • array. tofile(* f *)

    • 将所有项目(作为机器值)写入file object * f *。
  • array. tolist ( )

    • 将数组转换为具有相同项目的普通列表。
  • array. tostring ( )

从 3.2 版开始不推荐使用,将在 3.9 版中删除。

  • array. tounicode ( )
    • 将数组转换为 unicode 字符串。该数组必须是'u'类型的数组;否则引发ValueError。使用array.tobytes().decode(enc)从其他类型的数组获取 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)数据。

  • 数值 Python 文档

  • Numeric Python 扩展(NumPy)定义了另一种数组类型。有关数值 Python 的更多信息,请参见http://www.numpy.org/