Python3标准库:array数组
Posted 爱编程的小灰灰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3标准库:array数组相关的知识,希望对你有一定的参考价值。
1. array数组
array模块定义了一个序列数据结构,看起来与list很相似,只不过所有成员都必须是相同的基本类型。支持的类型包括所有数值类型或其他固定大小的基本类型(如字节)。
代码 | 类型 | 最小大小(字节) |
---|---|---|
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 |
1.1 初始化
array被实例化时可以提供一个参数来描述允许哪种数据类型,还可以有一个存储在数组中的初识数据序列。
import array import binascii s = b\'This is the array.\' a = array.array(\'b\', s) print(\'As byte string:\', s) print(\'As array :\', a) print(\'As hex :\', binascii.hexlify(a))
在这个例子中,数组被配置为包含一个字节序列,并用一个简单的字符串初始化。
1.2 处理数组
与其他Python序列相似,可以采用同样的方式扩展和处理array。
import array import pprint a = array.array(\'i\', range(3)) print(\'Initial :\', a) a.extend(range(3)) print(\'Extended:\', a) print(\'Slice :\', a[2:5]) print(\'Iterator:\') print(list(enumerate(a)))
目前支持的操作包括分片、迭代以及在末尾增加元素。
1.3 候选字节顺序
如果数组中数据没有采用原生的字节顺序,或者在发送到一个采用不同字节顺序的系统(或在网络上发送)之前数据需要交换顺序,那么可以由Python转换整个数组而不必迭代处理每一个元素。
import array import binascii def to_hex(a): chars_per_item = a.itemsize * 2 # 2 hex digits hex_version = binascii.hexlify(a) num_chunks = len(hex_version) // chars_per_item for i in range(num_chunks): start = i * chars_per_item end = start + chars_per_item yield hex_version[start:end] start = int(\'0x12345678\', 16) end = start + 5 a1 = array.array(\'i\', range(start, end)) a2 = array.array(\'i\', range(start, end)) a2.byteswap() fmt = \'{:>12} {:>12} {:>12} {:>12}\' print(fmt.format(\'A1 hex\', \'A1\', \'A2 hex\', \'A2\')) print(fmt.format(\'-\' * 12, \'-\' * 12, \'-\' * 12, \'-\' * 12)) fmt = \'{!r:>12} {:12} {!r:>12} {:12}\' for values in zip(to_hex(a1), a1, to_hex(a2), a2): print(fmt.format(*values))
byteswap()方法会用C交换数组中元素的字节顺序,这比用Python循环处理数据高效的多。
以上是关于Python3标准库:array数组的主要内容,如果未能解决你的问题,请参考以下文章