本模块定义高效的数值类型数组,主要包括类型有:字符、整数、浮点数。数值类型数组与列表比较相似,主要区别在于列表可以放入不同类型的元素,而类型数组只能放入一种类型的元素。类型数组只支持下面的类型:
类型字符 |
C类型 |
Python类型 |
占用最小的字节 |
备注 |
‘b‘ |
signed char |
int |
1 |
|
‘B‘ |
unsigned char |
int |
1 |
|
‘u‘ |
Py_UNICODE |
Unicode haracter |
2 |
|
‘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 |
|
‘Q‘ |
unsigned long long |
int |
8 |
|
‘f‘ |
float |
float |
4 |
|
‘d‘ |
double |
float |
8 |
实际以上类型的大小,是基于架构上的实现,更具体一点就是取决C语言的实现。
class array.array(typecode[, initializer])
使用类型码typecode创建一个新的数组。参数initializer是提供初始化的值,可以是一个列表,一个字节数组,或者是一个可迭代的对象。如果是一个列表或字符串,会使用fromlist()、frombytes()、fromunicode()函数来分解相关内容,并插入到数组里。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
print(a)
结果输出如下:
array(‘l‘, [1, 2, 3, 4, 5])
array.typecodes
返回array支持所有的类型代码。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
print(array.typecodes)
结果输出如下:
bBuhHiIlLqQfd
array.typecode
返回创建此数组的类型代码。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
print(a.typecode)
print(a[0], a[1])
结果输出如下:
l
1 2
array.itemsize
内部表示一项占用字节的大小。比如32位的整数是占用4字节。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
print(a.itemsize)
print(a[0:3])
结果输出如下:
4
array(‘l‘, [1, 2, 3])
array.append(x)
添加一项x到数组后面。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
print(a.itemsize)
a.append(8)
print(a)
结果输出如下:
4
array(‘l‘, [1, 2, 3, 4, 5, 8])
array.buffer_info()
返回一个元组(内存地址, 长度)。主要为了兼容旧的C代码而使用的,新的代码需要使用buffer protocol协议。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
print(a.itemsize)
print(a.buffer_info())
结果输出如下:
4
(2729208, 5)
array.byteswap()
把数组里所有元素进行字节顺序变换“Byteswap”。仅支持1,2,4,8个字节大小。主要用来变换不同机器之间的字节顺序。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
a.byteswap()
print(a)
结果输出如下:
array(‘l‘, [16777216, 33554432, 50331648, 67108864, 83886080])
array.count(x)
返回指定元素x在数组里出现的次数。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5, 3, 3, 3])
print(a.count(8))
print(a.count(3))
结果输出如下:
0
4
array.extend(iterable)
把迭代器iterable对象里的元素添加到数组里。如果iterable是数组,要保持类型一致,否则会抛出异常TypeError。如果不是数组类型对象,则需要可以把类型转换为一致。
例子:
#python 3.4
import array
a = array.array(‘l‘, [1, 2, 3, 4, 5])
b = array.array(‘l‘, [1, 9, 3])
a.extend(a)
print(a)
结果输出如下:
array(‘l‘, [1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
array.frombytes(s)
从字符串s添加到数组里面。
array.fromfile(f, n)
从文件对象f里读取n项,并添加在数组后面。如果文件里少于n项则会抛出异常EOFError,但那些可用的项仍会添加到数组里面。
例子:
#python 3.4
import array
import binascii
import tempfile
a = array.array(‘i‘, range(5))
print(‘A1: ‘, a)
output = tempfile.NamedTemporaryFile(delete=False)
a.tofile(output.file)
output.flush()
name = output.name
print(name)
output.close()
b = array.array(‘i‘)
with open(name, ‘rb‘) as input:
b.fromfile(input, len(a))
print(b)
结果输出如下:
A1: array(‘i‘, [0, 1, 2, 3, 4])
C:\Users\xxxx\AppData\Local\Temp\tmp_o3px5vs
array(‘i‘, [0, 1, 2, 3, 4])
array.fromlist(list)
从列表里添加数组项。等同于:for x in list: a.append(x)。如果类型不相同,数组内容不会改变。
例子:
#python 3.4
import array
import binascii
import tempfile
a = array.array(‘i‘)
l = [3, 6, 8, 9]
a.fromlist(l)
print(a)
结果输出如下:
array(‘i‘, [3, 6, 8, 9])
array.fromstring()
本函数的功能已经失效。可以使用frombytes()函数。
array.fromunicode(s)
从一个Unicode字符串扩展数组。数组类型必须是unicode的类型,否则抛出ValueError异常。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘ddd‘)
a.fromunicode(‘abc‘)
print(a)
结果输出如下:
array(‘u‘, ‘dddabc‘)
array.index(x)
返回在数组里最早出现元素x的最小的索引值。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
print(a.index(‘d‘))
结果输出如下:
4
array.insert(i, x)
插入一个元素x在位置i之前。如果i是负值表示从数组后面计算开始。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
a.insert(3, ‘a‘)
print(a)
结果输出如下:
array(‘u‘, ‘567a8ddd‘)
array.pop([i])
删除指定位置i的元素,缺省的值为-1,表示删除数组最后一个元素。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
a.pop()
a.pop(1)
print(a)
结果输出如下:
array(‘u‘, ‘578dd‘)
array.remove(x)
从数组里删除第一次出现元素x相同的值。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
a.remove(‘8‘)
print(a)
结果输出如下:
array(‘u‘, ‘567ddd‘)
array.reverse()
把数组的元素反序排列。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
print(a)
a.reverse()
print(a)
结果输出如下:
array(‘u‘, ‘5678ddd‘)
array(‘u‘, ‘ddd8765‘)
array.tobytes()
把数组转换为电脑内部表示,并返回bytes类型数组。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
print(a.tobytes())
输出结果如下:
b‘5\x006\x007\x008\x00d\x00d\x00d\x00‘
array.tofile(f)
把所有项的值(作为内部表示的值)写到文件对象f。
例子:
#python 3.4
import array
import binascii
import tempfile
a = array.array(‘i‘, range(5))
print(‘A1: ‘, a)
output = tempfile.NamedTemporaryFile(delete=False)
a.tofile(output.file)
output.flush()
name = output.name
print(name)
output.close()
b = array.array(‘i‘)
with open(name, ‘rb‘) as input:
b.fromfile(input, len(a))
print(b)
结果输出如下:
A1: array(‘i‘, [0, 1, 2, 3, 4])
C:\Users\xxxx\AppData\Local\Temp\tmp_o3px5vs
array(‘i‘, [0, 1, 2, 3, 4])
array.tolist()
把数组转换为列表表示。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
print(a.tolist())
结果输出如下:
[‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘d‘, ‘d‘, ‘d‘]
array.tostring()
转换为字符串。此函数将要丢弃,应使用tobytes()函数。
array.tounicode()
转换数组为unicode字符串。
例子:
#python 3.4
import array
a = array.array(‘u‘, ‘5678ddd‘)
print(a.tounicode())
结果输出如下:
5678ddd
蔡军生 QQ:9073204 深圳