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回圈處理資料高效的多,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/190810.html
標籤:Python
