array – 高效的数值数组详解(36)Python语言(必读进阶学习教程)(参考资料)
该模块定义了一个对象类型,它可以紧凑地表示一组基本值:字符、整数、浮点数。数组是序列类型,其行为与列表非常相似,只是其中存储的对象类型受到限制。类型是在对象创建时使用 类型代码指定的,类型代码是单个字符。定义了以下类型代码:
输入代码 | C型 | Python类型 | 最小大小(字节) | 笔记 |
---|---|---|---|---|
'b' |
签名的char | INT | 1 | |
'B' |
无符号的字符 | INT | 1 | |
'u' |
Py_UNICODE | Unicode字符 | 2 | (1) |
'h' |
签了字 | INT | 2 | |
'H' |
未签约的短片 | INT | 2 | |
'i' |
签名int | INT | 2 | |
'I' |
unsigned int | INT | 2 | |
'l' |
签了很久 | INT | 4 | |
'L' |
无符号长 | INT | 4 | |
'q' |
签了很久 | INT | 8 | |
'Q' |
unsigned long long | INT | 8 | |
'f' |
浮动 | 浮动 | 4 | |
'd' |
双 | 浮动 | 8 |
笔记:
- ‘u’ 类型代码对应于 Python 过时的 unicode 字符(Py_UNICODE,即 wchar_t)。 根据平台的不同,它可以是 16 位或 32 位。
‘u’ 将与 Py_UNICODE API 的其余部分一起删除。
自 3.3 版起已弃用,将在 4.0 版中删除。
值的实际表示由机器架构决定(严格来说,由 C 实现)。 可以通过 itemsize 属性访问实际大小。
该模块定义了以下类型:
- class
array.
array
(typecode[, initializer]) - 一个新数组,其项目受typecode限制,并从可选的初始化值初始化,该值必须是列表,类似 字节的对象,或者可以在适当类型的元素上进行迭代。
如果给一个列表或字符串,初始化传递给新阵列的
fromlist()
,frombytes()
或fromunicode()
方法(见下文)初始项添加到阵列。否则,可迭代初始值设定项将传递给该extend()
方法。
数组对象支持索引,切片,连接和乘法的普通序列操作。使用切片分配时,指定的值必须是具有相同类型代码的数组对象; 在所有其他情况下, TypeError
被提出。数组对象也实现缓冲区接口,并且可以在支持字节类对象的任何地方使用。
还支持以下数据项和方法:
array.
typecode
- 用于创建数组的typecode字符。
array.
itemsize
- 内部表示中一个数组项的长度(以字节为单位)。
array.
append
(x)- 将值为x的新项追加到数组的末尾。
array.
buffer_info
()- 返回一个元组(地址,长度),给出当前内存地址和用于保存数组内容的缓冲区元素的长度。 内存缓冲区的大小(以字节为单位)可以计算为 array.buffer_info()[1] * array.itemsize。 这在使用需要内存地址的低级(并且本质上不安全)I/O 接口时偶尔有用,例如某些 ioctl() 操作。 只要数组存在并且没有对其应用长度更改操作,返回的数字就有效。
注意
当从用 C 或 C++ 编写的代码中使用数组对象时(有效利用此信息的唯一方法),使用数组对象支持的缓冲区接口更有意义。 此方法是为了向后兼容而保留的,应避免在新代码中使用。 缓冲区接口记录在缓冲区协议中。
array.
byteswap
()- “字节交换”数组的所有项目。 这仅支持大小为 1、2、4 或 8 字节的值; 对于其他类型的值,会引发 RuntimeError。 当从以不同字节顺序写入机器上的文件中读取数据时,它很有用。
array.
xcount(
)
- 返回数组中x的出现次数。
array.
iterableextend(
)
- 将 iterable 中的项目附加到数组的末尾。 如果 iterable 是另一个数组,它必须具有完全相同的类型代码; 如果不是,将引发 TypeError。 如果 iterable 不是数组,则它必须是可迭代的,并且其元素必须是要附加到数组的正确类型。
array.
sfrombytes(
)
- 附加字符串中的项目,将字符串解释为机器值数组(就好像它是使用 fromfile() 方法从文件中读取的一样)。
3.2 新版功能:为了清楚起见,fromstring() 被重命名为 frombytes()。
farray.
fromfile
(
n,
)
- 从文件对象 f 中读取 n 个项目(作为机器值)并将它们附加到数组的末尾。 如果可用的项目少于 n 个,则会引发 EOFError,但可用的项目仍会插入到数组中。 f 必须是一个真正的内置文件对象; 其他带有 read() 方法的东西是行不通的。
listarray.
fromlist
()
- 追加列表中的项目。 这等同于 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 数据附加到其他类型的数组。
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() 方法写入文件的字节序列相同。)
array.
tofile
(f)- 将所有项目(作为机器值)写入文件对象 f。
array.
tolist
()- 将数组转换为具有相同项的普通列表。
array.
tounicode
()- 将数组转换为 unicode 字符串。 该数组必须是类型为“u”的数组; 否则会引发 ValueError。 使用 array.tobytes().decode(enc) 从其他类型的数组中获取 unicode 字符串。
当数组对象被打印或转换为字符串时,它被表示为数组(类型代码,初始值设定项)。 如果数组为空,则省略初始值设定项,否则如果类型代码为“u”,则为字符串,否则为数字列表。 只要使用 from array import array 导入了数组类,就保证可以使用 eval() 将字符串转换回具有相同类型和值的数组。 例子:
array('l')
array('u', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])