8.7。 array
- 高效的数值数组¶
该模块定义了一个对象类型,可以紧凑地表示一个基本值的数组:字符,整数,浮点数。数组是序列类型,并且表现得非常像列表,除了存储在它们中的对象的类型是受约束的。类型在对象创建时使用类型代码指定,该类型代码是单个字符。定义了以下类型代码:
类型代码 | C类型 | Python类型 | 最小大小(以字节为单位) | 笔记 |
---|---|---|---|---|
'b' | signed char | int | 1 | |
'B' | unsigned char | int | 1 | |
'u' | Py_UNICODE | 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 | (2) |
'Q' | unsigned long long | int | 8 | (2) |
'f' | float | float | 4 | |
'd' | double | float | 8 |
笔记:
'u'
类型代码对应于Python的过时unicode字符(Py_UNICODE
,即wchar_t
)。根据平台,它可以是16位或32位。'u'
将与Py_UNICODE
API的其余部分一起删除。从版本3.3开始弃用,将在4.0版中删除。
The
'q'
and'Q'
type codes are available only if the platform C compiler used to build Python supports Clong long
, or, on Windows,__int64
.版本3.3中的新功能。
值的实际表示由机器架构(严格地说,由C实现)确定。实际大小可以通过itemsize
属性访问。
模块定义以下类型:
- class
array.
array
(typecode[, initializer])¶ 项目受类型代码限制并从可选的初始化器值初始化的新数组,它必须是一个列表,bytes-like object ,或者在适当类型的元素上迭代。
如果给定一个列表或字符串,初始化器被传递到新数组的
fromlist()
,frombytes()
或fromunicode()
否则,可迭代初始化器传递到extend()
方法。
array.
typecodes
¶包含所有可用类型代码的字符串。
数组对象支持索引,切片,级联和乘法的常规顺序操作。当使用切片分配时,分配的值必须是具有相同类型代码的数组对象;在所有其他情况下,会引发TypeError
。数组对象还实现缓冲区接口,并且可以在支持bytes-like objects的任何位置使用。
还支持以下数据项和方法:
array.
typecode
¶用于创建数组的类型代码字符。
array.
itemsize
¶内部表示中一个数组项的字节长度。
array.
append
(x)¶将值为x的新项目附加到数组的末尾。
array.
buffer_info
()¶返回一个元组
(地址, 长度)
给出当前存储器地址和用于保存数组内容的缓冲区元素的长度。以字节为单位的存储器缓冲区的大小可以计算为array.buffer_info()[1] * array.itemsize t0>。
当使用需要存储器地址的低级(和本质上不安全的)I / O接口时,这有时很有用,例如某些ioctl()
操作。只要数组存在并且不对其应用长度改变操作,返回的数字是有效的。注意
当使用以C或C ++编写的代码(有效利用此信息的唯一方法)使用数组对象时,使用数组对象支持的缓冲区接口更有意义。此方法是为了向后兼容性而保留的,应在新代码中避免。缓冲区接口记录在Buffer Protocol中。
array.
byteswap
()¶“Byteswap”数组的所有项。这仅适用于大小为1,2,4或8个字节的值;对于其他类型的值,会引发
RuntimeError
。在从具有不同字节顺序的机器上写入的文件读取数据时非常有用。
array.
count
(x)¶返回数组中 x 的次数。
array.
extend
(iterable)¶将可迭代对象的项目附加到数组的末尾。如果iterable是另一个数组,它必须具有完全相同的类型代码;否则,则会引发
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)¶从列表中追加项目。这等效于 t>> 列表中的
: t> x :
a.append / t5>,但是如果存在类型错误,则数组不更改。
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.
tounicode
()¶将数组转换为unicode字符串。数组必须是类型
'u'
数组;否则会引发ValueError
。使用array.tobytes().decode(enc)
从某个其他类型的数组获取unicode字符串。
当数组对象被打印或转换为字符串时,它被表示为array(typecode, initializer)
。如果数组为空,则省略初始化器,否则如果类型代码为'u'
,则为字符串,否则为列表数字。使用eval()
,只要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/。