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循環處理數據高效的多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM