虽然python列表既灵活又简单,但是面对各类需求时,我们可能有更好的选择。比如,要存放1000万个浮点数的话,数组(array)的效率要高得多,因为数组在背后存的并不是float对象,而是数字的机器翻译,也就是字节表述。如果我们需要一个只包含数字的列表,那么array.array比list更高效。数组支持所有跟可变序列有关的操作,包括.pop、.insert、和.extend。另外,数组还提供从文件读取和存入文件的方法,如.frombytes和.tofile。
arr_name = array.array(typecode[, initializer])
在创建python array时,需要指定一个类型码,这个类型码用来表示底层的C语言应该存放怎样的数据类型。比如b类型表示有符号的字符(signed char),因此array('b')创建出的数组就只能存放一个字节大小的整数,范围从-128到127。
from array import array arr = array('i', [10, 20, 30, 40, 50]) for x in arr: print(x) 输出: 10 20 30 40 50
上面代码创建了一个大小为2个字节的带符号整数数组,并将其输出。
其他类型码
Type code | C Type | Python Type | Minimum size in bytes |
---|---|---|---|
'b' | signed char | int | 1 |
'B' | unsigned char | int | 1 |
'h' | signed short | int | 2 |
'H' | unsigned short | int | 2 |
'i' | signed int | int | 2 |
'I' | unsigned int | int | 2 |
'l'(lower 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 |
from array import array arr = array('i', [10, 20, 30, 40, 50]) print(arr[0]) print(arr[1]) 输出: 10 20
from array import array arr = array('i', [10, 20, 30, 40, 50]) arr.insert(1, 60) for x in arr: print(x) 输出: 10 60 20 30 40 50
from array import array arr = array('i', [10, 20, 30, 40, 50]) arr.remove(40) for x in arr: print(x) 输出: 10 20 30 50
from array import array arr = array('i', [10, 20, 30, 40, 50]) print(arr.index(40)) 输出: 3