python中的数组数据结构(Python数据结构与算法)
python中的数组数据结构(Python数据结构与算法)1Int类型最小大小(字节)b
前言一般来说,我们将Python中的list列表当作数组。但是Python中真正的数组是:array。
它看上去跟list很相似,但是list列表成员可以是任意类型的组合也可以是单一的类型组合,而array数组并不能是,它的所有成员必须是相同的类型。包括了所有的数值类型或其他固定大小的基本类型。
支持的类型如下表:
| 
     代码  | 
     类型  | 
     最小大小(字节)  | 
| 
     b  | 
     Int  | 
     1  | 
| 
     B  | 
     Int  | 
     1  | 
| 
     h  | 
     Signed short  | 
     2  | 
| 
     H  | 
     Unsigned short  | 
     2  | 
| 
     i  | 
     Signed int  | 
     2  | 
| 
     I  | 
     Unsigned int  | 
     2  | 
| 
     l  | 
     Signed long  | 
     4  | 
| 
     L  | 
     UnSigned long  | 
     4  | 
| 
     q  | 
     Signed long long  | 
     8  | 
| 
     Q  | 
     Unsigned long long  | 
     8  | 
| 
     f  | 
     Float  | 
     4  | 
| 
     d  | 
     Double float  | 
     8  | 
array数组被实例化时,可以提供一个参数来描述其允许哪种类型,还可以有一个存储在数组中的初始数据序列。
具体代码如下:
import array
s = b'My name is Li Yuanjing'
a = array.array('b'  s)
print(a)
    
运行之后,效果如下:

这里,我们直接将字符串转换为对应的数值ASCII编码。其中array.array()函数的第1个参数为类型,具体类型如本博文开头所示。
基本用法如其他Python序列类似,array数组可以采用同样的方式进行扩展和处理。具体操作如下:
import array
a = array.array('i'  range(5))
print("构造函数创建")
print(a)
a.extend(range(5))
print("增添值")
print(a)
print("获取第3到第5个元素(不包括5,从0开始):")
print(a[3:5])
print("转换为list列表")
print(list(enumerate(a)))
    
运行之后,效果如下:

在实际的应用中,往往有时候需要将数组写入文件进行保存。这个时候,如何高效率的存储array数组是非常重要的,毕竟不是文本字符串。
一般来说,我们会将array直接转换为二进制进行存储。具体操作如下:
import array
import binascii
a = array.array('i'  range(5))
print(a)
a_bytes = a.tobytes()
print(binascii.hexlify(a_bytes))
a2 = array.array('i')
a2.frombytes(a_bytes)
print(a2)
    
运行之后,效果如下:

中间输出的是16进制。tobytes往往与frombytes结合起来使用。文件方面也是,tofile()往往与tobytes()格式化数据一起用。




