array
— 數值的高效陣列¶
此模組定義了一個物件型別,可以緊湊地表示基本值的陣列:字元、整數、浮點數。 陣列是序列型別,其行為與列表非常相似,只是儲存在其中的物件的型別受到限制。 型別在物件建立時使用型別碼指定,型別碼是單個字元。 定義了以下型別程式碼
型別碼 |
C 型別 |
Python 型別 |
最小位元組大小 |
註釋 |
---|---|---|---|---|
|
signed char |
int |
1 |
|
|
unsigned char |
int |
1 |
|
|
wchar_t |
Unicode 字元 |
2 |
(1) |
|
Py_UCS4 |
Unicode 字元 |
4 |
|
|
signed short |
int |
2 |
|
|
unsigned short |
int |
2 |
|
|
signed int |
int |
2 |
|
|
unsigned int |
int |
2 |
|
|
signed long |
int |
4 |
|
|
unsigned long |
int |
4 |
|
|
signed long long |
int |
8 |
|
|
unsigned long long |
int |
8 |
|
|
float |
float |
4 |
|
|
double |
float |
8 |
註釋
它可能是 16 位或 32 位,具體取決於平臺。
在 3.9 版本中更改:
array('u')
現在使用wchar_t
作為 C 型別,而不是已棄用的Py_UNICODE
。 此更改不會影響其行為,因為自 Python 3.3 以來Py_UNICODE
是wchar_t
的別名。自 3.3 版本棄用,將在 3.16 版本中刪除: 請遷移到
'w'
型別碼。
值的實際表示形式由機器架構(嚴格來說,由 C 實現)確定。 實際大小可以透過 array.itemsize
屬性訪問。
該模組定義了以下項
- array.typecodes¶
一個包含所有可用型別碼的字串。
該模組定義了以下型別
- class array.array(typecode[, initializer])¶
一個新陣列,其項受 typecode 限制,並從可選的 initializer 值初始化,該值必須是
bytes
或bytearray
物件、Unicode 字串或適當型別的元素的可迭代物件。如果給定
bytes
或bytearray
物件,則將初始化程式傳遞給新陣列的frombytes()
方法;如果給定 Unicode 字串,則將初始化程式傳遞給fromunicode()
方法;否則,將初始化程式的迭代器傳遞給extend()
方法,以將初始項新增到陣列中。陣列物件支援索引、切片、連線和乘法的普通序列操作。 當使用切片賦值時,分配的值必須是具有相同型別程式碼的陣列物件;在所有其他情況下,將引發
TypeError
。 陣列物件還實現緩衝區介面,並且可以在支援類位元組物件的任何地方使用。使用引數
typecode
、initializer
引發 審計事件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()
。
- 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,使得 i 是 x 在陣列中第一次出現的索引。 可以指定可選引數 start 和 stop 來在陣列的子部分中搜索 x。 如果未找到 x,則引發
ValueError
。3.10 版本更改: 添加了可選引數 start 和 stop。
- insert(i, x)¶
在陣列的位置 i 之前插入一個新項,其值為 x。 負值被視為相對於陣列末尾的值。
- pop([i])¶
從陣列中刪除索引為 i 的項並返回它。 可選引數預設為
-1
,因此預設情況下會刪除並返回最後一個項。
- remove(x)¶
從陣列中刪除第一次出現的 x。
- clear()¶
刪除陣列中的所有元素。
3.13 版本新增。
- reverse()¶
反轉陣列中各項的順序。
- tobytes()¶
將陣列轉換為機器值的陣列,並返回位元組表示形式(與
tofile()
方法寫入檔案的位元組序列相同)。3.2 版本新增: 為了更清晰,
tostring()
被重新命名為tobytes()
。
- 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()
將字串表示形式轉換回具有相同型別和值的陣列。如果包含相應的浮點值,則還必須定義變數 inf
和 nan
。例子
array('l')
array('w', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])