array — 數值的高效陣列


此模組定義了一個物件型別,可以緊湊地表示基本值的陣列:字元、整數、浮點數。 陣列是序列型別,其行為與列表非常相似,只是儲存在其中的物件的型別受到限制。 型別在物件建立時使用型別碼指定,型別碼是單個字元。 定義了以下型別程式碼

型別碼

C 型別

Python 型別

最小位元組大小

註釋

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

wchar_t

Unicode 字元

2

(1)

'w'

Py_UCS4

Unicode 字元

4

'h'

signed short

int

2

'H'

unsigned short

int

2

'i'

signed int

int

2

'I'

unsigned int

int

2

'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

註釋

  1. 它可能是 16 位或 32 位,具體取決於平臺。

    在 3.9 版本中更改: array('u') 現在使用 wchar_t 作為 C 型別,而不是已棄用的 Py_UNICODE。 此更改不會影響其行為,因為自 Python 3.3 以來 Py_UNICODEwchar_t 的別名。

    自 3.3 版本棄用,將在 3.16 版本中刪除: 請遷移到 'w' 型別碼。

值的實際表示形式由機器架構(嚴格來說,由 C 實現)確定。 實際大小可以透過 array.itemsize 屬性訪問。

該模組定義了以下項

array.typecodes

一個包含所有可用型別碼的字串。

該模組定義了以下型別

class array.array(typecode[, initializer])

一個新陣列,其項受 typecode 限制,並從可選的 initializer 值初始化,該值必須是 bytesbytearray 物件、Unicode 字串或適當型別的元素的可迭代物件。

如果給定 bytesbytearray 物件,則將初始化程式傳遞給新陣列的 frombytes() 方法;如果給定 Unicode 字串,則將初始化程式傳遞給 fromunicode() 方法;否則,將初始化程式的迭代器傳遞給 extend() 方法,以將初始項新增到陣列中。

陣列物件支援索引、切片、連線和乘法的普通序列操作。 當使用切片賦值時,分配的值必須是具有相同型別程式碼的陣列物件;在所有其他情況下,將引發 TypeError。 陣列物件還實現緩衝區介面,並且可以在支援類位元組物件的任何地方使用。

使用引數 typecodeinitializer 引發 審計事件 array.__new__

typecode

用於建立陣列的型別碼字元。

itemsize

內部表示中一個數組項的長度(以位元組為單位)。

append(x)

將值 x 的新項追加到陣列的末尾。

buffer_info()

返回一個元組 (address, length),給出當前記憶體地址和用於儲存陣列內容的緩衝區的長度(以元素為單位)。 可以將記憶體緩衝區的大小(以位元組為單位)計算為 array.buffer_info()[1] * array.itemsize。 當使用需要記憶體地址的低階(且本質上不安全)I/O 介面(例如某些 ioctl() 操作)時,這有時很有用。 返回的數字在陣列存在且未對其應用任何更改長度的操作時有效。

註解

當使用用 C 或 C++ 編寫的程式碼中的陣列物件時(這是有效利用此資訊的唯一方法),使用陣列物件支援的緩衝區介面更有意義。 維護此方法是為了向後相容,應在新程式碼中避免使用。 緩衝區介面在 緩衝區協議中進行了說明。

byteswap()

“位元組交換”陣列的所有項。 這僅支援大小為 1、2、4 或 8 位元組的值;對於其他型別的值,將引發 RuntimeError。 從具有不同位元組順序的機器上寫入的檔案讀取資料時,這很有用。

count(x)

返回陣列中 x 的出現次數。

extend(iterable)

iterable 中的項追加到陣列的末尾。 如果 iterable 是另一個數組,則它必須具有完全相同的型別程式碼; 如果不是,則將引發 TypeError。 如果 iterable 不是陣列,則它必須是可迭代的,並且其元素必須是適合追加到陣列的正確型別。

frombytes(buffer)

類位元組物件追加元素,將其內容解釋為機器值的陣列(就像使用 fromfile() 方法從檔案中讀取一樣)。

3.2 版本新增: 為了更清晰,fromstring() 被重新命名為 frombytes()

fromfile(f, n)

檔案物件 f 中讀取 n 個元素(作為機器值),並將它們追加到陣列的末尾。 如果可用元素少於 n 個,則會引發 EOFError,但可用的元素仍然會插入到陣列中。

fromlist(list)

從列表追加元素。 這等效於 for x in list: a.append(x),但如果存在型別錯誤,則陣列保持不變。

fromunicode(s)

使用給定的 Unicode 字串中的資料擴充套件此陣列。 陣列的型別程式碼必須為 'u''w'; 否則會引發 ValueError。 使用 array.frombytes(unicodestring.encode(enc)) 將 Unicode 資料追加到其他型別的陣列。

index(x[, start[, stop]])

返回最小的 i,使得 ix 在陣列中第一次出現的索引。 可以指定可選引數 startstop 來在陣列的子部分中搜索 x。 如果未找到 x,則引發 ValueError

3.10 版本更改: 添加了可選引數 startstop

insert(i, x)

在陣列的位置 i 之前插入一個新項,其值為 x。 負值被視為相對於陣列末尾的值。

pop([i])

從陣列中刪除索引為 i 的項並返回它。 可選引數預設為 -1,因此預設情況下會刪除並返回最後一個項。

remove(x)

從陣列中刪除第一次出現的 x

clear()

刪除陣列中的所有元素。

3.13 版本新增。

reverse()

反轉陣列中各項的順序。

tobytes()

將陣列轉換為機器值的陣列,並返回位元組表示形式(與 tofile() 方法寫入檔案的位元組序列相同)。

3.2 版本新增: 為了更清晰,tostring() 被重新命名為 tobytes()

tofile(f)

將所有項(作為機器值)寫入到檔案物件 f

tolist()

將陣列轉換為具有相同項的普通列表。

tounicode()

將陣列轉換為 Unicode 字串。陣列的型別必須為 'u''w'; 否則會引發 ValueError。使用 array.tobytes().decode(enc) 從其他型別的陣列中獲取 Unicode 字串。

陣列物件的字串表示形式為 array(typecode, initializer)。 如果陣列為空,則省略 initializer,否則,如果 typecode'u''w',則它是 Unicode 字串,否則它是數字列表。只要使用 from array import array 匯入了 array 類,就可以保證使用 eval() 將字串表示形式轉換回具有相同型別和值的陣列。如果包含相應的浮點值,則還必須定義變數 infnan。例子

array('l')
array('w', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])

另請參閱

模組 struct

打包和解包異構二進位制資料。

NumPy

NumPy 包定義了另一種陣列型別。