array
array — Efficient arrays of numeric values
该模块定义了一个对象类型,它可以紧凑地表示一组基本值:字符,整数,浮点数。数组是序列类型,其行为与列表非常相似,除了存储在其中的对象类型受到约束。该类型是在对象创建时使用类型代码
指定的,该类型代码
是单个字符。以下类型代码
被定义:
输入代码 | C型 | Python类型 | 最小字节数 |
---|---|---|---|
'C' | char | 字符 | 1 |
'B' | 签名字符 | INT | 1 |
'B' | 无符号字符 | INT | 1 |
“u” | Py_UNICODE | Unicode字符 | 2(见注) |
'H' | 签署简称 | INT | 2 |
'H' | 无符号短 | INT | 2 |
'i' | 签名int | INT | 2 |
'i' | 无符号整数 | long | 2 |
'L' | 长签字 | INT | 4 |
'L' | 无符号长整数 | long | 4 |
'F' | 浮动 | 浮动 | 4 |
'd' | 双 | 浮动 | 8 |
注意
该'u'
类型代码对应于Python的Unicode字符。在狭窄的Unicode版本中,这是2字节,在宽版本上是4字节。
值的实际表示由机器体系结构决定(严格来说,由C实现)。实际大小可以通过itemsize
属性访问。因为Python的普通整数类型不能表示整个范围的C的无符号(长整数)整数,所以存储for 'L'
和'I'
items 的值将在检索时表示为Python长整型。
该模块定义了以下类型:
class array.array(typecode[, initializer])
一个新的数组,其项目受typecode
限制,并从可选的初始
值设定项值初始化
,该值必须是一个列表,字符串或可在相应类型的元素上迭代。
在版本2.4中更改:以前只接受列表或字符串。
如果给一个列表或字符串,初始化传递给新阵列的fromlist()
,fromstring()
或fromunicode()
方法(见下文)初始项添加到阵列。否则,可迭代的初始化器会传递给extend()
方法。
array.ArrayType
已过时的别名array
。
数组对象支持索引,切片,连接和乘法的普通序列操作。使用切片分配时,分配的值必须是具有相同类型代码的数组对象; 在所有其他情况下,都会TypeError
被提出。数组对象也实现了缓冲区接口,并且可以在任何支持缓冲区对象的地方使用。
以下数据项和方法也受支持:
array.typecode
用于创建数组的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
中的项追加到数组的末尾。如果可迭代
是另一个数组,它必须具有完全相同
的类型代码; 如果没有,TypeError
将会被提出。如果iterable
不是数组,则它必须是可迭代
的,并且其元素必须是要附加到数组的正确类型。
在版本2.4中更改:以前,参数只能是另一个数组。
array.fromfile(f, n)
从文件对象f中
读取n
项(作为机器值)并将它们附加到数组的末尾。如果少于n个
项目可用,则引发,但可用的项目仍插入到数组中。f
必须是一个真正的内置文件对象; 其他方法不会做。EOFErrorread()
array.fromlist(list)
附加列表中的项目。这相当于for x in list: a.append(x)
除了如果存在类型错误,数组不变。
array.fromstring(s)
追加字符串中的项目,将字符串解释为机器值的数组(如同使用fromfile()
方法从文件中读取一样)。
array.fromunicode(s)
用给定的unicode字符串的数据扩展这个数组。该数组必须是一个类型'u'
数组; 否则ValueError
会提出。使用array.fromstring(unicodestring.encode(enc))
为Unicode数据追加到一些其它类型的阵列。
array.index(x)
返回最小的i,
这样我
就是数组中第一个x
的索引。
array.insert(i, x)
在位置i
之前在数组中插入一个值为x
的新项目。负值被视为相对于数组的末尾。
array.pop([i])
从数组中删除具有索引i
的项目并将其返回。可选参数默认为-1
,所以默认情况下最后一项被移除并返回。
array.read(f, n)
自1.5.1版弃用:使用该fromfile()
方法。
从文件对象f中
读取n
项(作为机器值)并将它们附加到数组的末尾。如果少于n个
项目可用,则引发,但可用的项目仍插入到数组中。f
必须是一个真正的内置文件对象; 其他方法不会做。EOFErrorread()
array.remove(x)
从数组中删除第一个x
。
array.reverse()
颠倒数组中项目的顺序。
array.tofile(f)
将所有项目(作为机器值)写入文件对象f
。
array.tolist()
将数组转换为具有相同项目的普通列表。
array.tostring()
将数组转换为一组机器值并返回字符串表示形式(与tofile()
方法将写入文件的字节序列相同)。
array.tounicode()
将数组转换为unicode字符串。该数组必须是一个类型'u'
数组; 否则ValueError
会提出。用于array.tostring().decode(enc)
从其他类型的数组中获取一个unicode字符串。
array.write(f)
自1.5.1版弃用:使用该tofile()
方法。
将所有项目(作为机器值)写入文件对象f
。
当一个数组对象被打印或转换为一个字符串时,它被表示为array(typecode, initializer)
。的初始值设定
,如果数组为空被省略,否则它是一个字符串,如果类型代码
是'c'
,否则是号码的列表。该字符串保证能够使用相同的类型和值转换回数组eval()
,只要array
类已经使用导入from array import array
。例子:
array('l')
array('c', 'hello world')
array('u', u'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])