array --- 高效率的數值型陣列¶
這個模組定義了一個物件型別,可以簡潔的表達一個包含基本數值的陣列:字元、整數、浮點數。陣列是一個非常類似 list(串列)的序列型別,除了陣列會限制儲存的物件型別。在建立陣列時可以使用一個字元的 type code 來指定儲存的資料型別。以下為有被定義的 type codes:
| Type code | C Type | Python Type | 所需的最小位元組 (bytes) | 註解 | 
|---|---|---|---|---|
| 
 | signed char | int | 1 | |
| 
 | unsigned char | int | 1 | |
| 
 | wchar_t | Unicode character | 2 | (1) | 
| 
 | 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。这个改变不会影响其行为,因为- Py_UNICODE自 Python 3.3 起就是- wchar_t的别名。- 自從版本 3.3 後不推薦使用,將會自版本 4.0 中移除。. 
實際上數值的表示方法是被機器的架構所決定(更精準地說,被 C 的實作方法決定)。實際的大小可以透過 array.itemsize 屬性存取。
這個模組定義了以下項目:
- array.typecodes¶
- 一個包含所有可用的 type codes 的字串。 
這個模組定義了下方的型別:
- class array.array(typecode[, initializer])¶
- 一个由 typecode 限定其条目的新数组,并能根据可选的 initializer 值来初始化。initializer 必须是 - bytes或- bytearray对象、Unicode 字符串或元素类型合适的可迭代对象。- 如果给定了一个 - bytes或- bytearray对象,则将 initializer 传给新数组的- frombytes()方法;如果给定了一个 Unicode 字符串,则将 initializer 传给- fromunicode()方法;在其他情况下,则将 initializer 的迭代器传给- extend()方法以向数组添加初始条目。- 陣列支援常見的序列操作,包含索引 (indexing)、切片 (slicing)、串接 (concatenation)、相乘 (multiplication) 等。當使用切片進行賦值時,賦值的陣列必須具備相同的 type code,其他型別的數值將導致 - TypeError。陣列同時也實作了緩衝區介面,可以在任何支援 bytes-like objects 的地方使用。- 引發稽核事件 (auditing event) - array.__new__並帶入引數- typecode、- initializer。- typecode¶
- typecode 字元被用在建立陣列時。 
 - itemsize¶
- 陣列當中的一個元素在內部需要的位元組長度。 
 - append(x)¶
- 新增一個元素 x 到陣列的最尾端。 
 - buffer_info()¶
- 回傳一個 tuple - (address, length)表示當前的記憶體位置和陣列儲存元素的緩衝區記憶體長度。緩衝區的長度單位是位元組,並可以用- array.buffer_info()[1] * array.itemsize計算得到。這偶爾會在底層操作需要記憶體位置的輸出輸入時很有用,例如- ioctl()指令。只要陣列存在且沒有使用任何更改長度的操作時,回傳的數值就有效。- 備註 - 當使用來自 C 或 C++ 程式碼(這是唯一使得這個資訊有效的途徑)的陣列物件時,更適當的做法是使用陣列物件支援的緩衝區介面。這個方法維護了向後兼容性,並應該在新的程式碼中避免。關於緩衝區介面的文件在緩衝協定 (Buffer Protocol)。 
 - byteswap()¶
- "Byteswap" 所有陣列中的物件。這只有支援物件長度為 1、2、4 或 8 位元組的陣列,其他型別的值會導致 - RuntimeError。這在從機器讀取位元順序不同的檔案時很有用。
 - count(x)¶
- 回傳 x 在陣列中出現了幾次。 
 - extend(iterable)¶
- 從 iterable 中新增元素到陣列的尾端,如果 iterable 是另一個陣列,它必須有完全相同的 type code,如果不同會導致 - TypeError。如果 iterable 不是一個陣列,它必須可以被疊代 (iterable) 且其中的元素必須是可以被加入陣列中的正確型別。
 - frombytes(buffer)¶
- 添加来自 bytes-like object 的条目,将其内容解读为由机器值组成的数组(就像是使用 - fromfile()方法从文件中读取内容一样)。- 在 3.2 版新加入: 將 - fromstring()更名為- frombytes(),使其更加清晰易懂。
 - fromfile(f, n)¶
- 從 file object f 讀取 n 個元素(作為機器數值),接著將這些元素加入陣列的最尾端。如果只有少於 n 個有效的元素會導致 - EOFError,但有效的元素仍然會被加入陣列中。
 - fromlist(list)¶
- 從 list 中新增元素。這等價於 - for x in list: a.append(x),除了有型別錯誤產生時,陣列會保持原狀不會被更改。
 - fromunicode(s)¶
- 用给定的 Unicode 字符串中的数据扩展数组。 数组的类型代码必须是 - 'u',否则会引发- 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 的元素。選擇性的引數 i 預設為 - -1,所以預設會刪除並回傳最後一個元素。
 - remove(x)¶
- 從陣列中刪除第一個出現的 x。 
 - reverse()¶
- 反轉陣列中元素的順序。 
 - tobytes()¶
- 將陣列轉為另一個機器數值組成的陣列並回傳它的位元組表示(跟用 - tofile()方法寫入檔案時的位元序列相同)。- 在 3.2 版新加入: 為了明確性,過去的 - tostring()已更名為- tobytes()。
 - tofile(f)¶
- 將所有元素(作為機器數值)寫入 file object f。 
 - tolist()¶
- 不更改元素,將陣列轉為一般的 list。 
 - tounicode()¶
- 将数组转换为 Unicode 字符串。 数组的类型必须是 - 'u';否则会引发- ValueError异常。 使用- array.tobytes().decode(enc)可从其他类型的数组中获取 Unicode字符串。
 
数组对象的字符串表示形式是 array(typecode, initializer)。 如果数组为空 initializer 将被省略,否则如果 typecode 为 'u' 则为 Unicode 字符串,否则为由数字组成的列表。 只要 array 类是使用 from array import array 导入的,该字符串表示形式就保证能使用 eval() 转换回具有相同类型和值的数组。 如果它包含相应的浮点数值则还必须定义变量 inf 和 nan。 例如:
array('l')
array('u', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])