陣列 — Python 中高效的數值陣列
陣列是 C/C++、Java 等語言中非常流行的一種資料結構。在這些語言中,陣列被定義為多個相同資料型別元素的集合。Python 本身沒有等效的陣列型別。它的列表和元組都是元素的集合,但它們可以包含不同型別的資料。
Python 的 array 模組模擬了 C 型別的陣列。該模組定義了 'array' 類。以下建構函式建立一個數組物件
array(typecode, initializer)
typecode 引數決定陣列的型別。初始化器應該是一個序列,所有元素都必須是匹配的型別。
以下語句建立一個整數陣列物件
>>> import array >>> arr = array.array('i', range(5)) >>> arr array('i', [0, 1, 2, 3, 4]) >>> type(arr) <class 'array.array'> >>> array.typecodes 'bBuhHiIlLqQfd'
array 模組定義了 typecodes 屬性,它返回一個字串。字串中的每個字元都表示一個型別程式碼,指示 C 型別和等效的 Python 型別。
型別程式碼 | C 型別 | Python 型別 |
---|---|---|
'b' | 有符號字元 | 整數 |
'B' | 無符號字元 | 整數 |
'u' | Py_UNICODE | Unicode 字元 |
'h' | 有符號短整型 | 整數 |
'H' | 無符號短整型 | 整數 |
'i' | 有符號整型 | 整數 |
'I' | 無符號整型 | 整數 |
'l' | 有符號長整型 | 整數 |
'L' | 無符號長整型 | 整數 |
'q' | 有符號長長整型 | 整數 |
'Q' | 無符號長長整型 | 整數 |
'f' | 浮點數 | 浮點數 |
'd' | 雙精度浮點數 | 浮點數 |
初始化器引數可以是類位元組物件。以下示例根據字串的位元組表示構建一個數組。
>>> arr1 = array.array('b', b'Hello') >>> arr1 array('b', [72, 101, 108, 108, 111])
array 類定義了以下方法
array.buffer_info()
此方法返回一個元組 (地址,長度),給出用於儲存陣列內容的緩衝區的當前記憶體地址和元素長度。
>>> arr = array.array('i', [0, 1, 2, 3, 4]) >>> arr.buffer_info() (2201141755144, 5)
count()
此方法返回陣列中某個元素出現的次數。
>>> arr = array.array('i', [0, 1, 2, 3, 4]) >>> arr.count(2) 1
extend()
此方法將可迭代物件中的項附加到陣列的末尾,或者可迭代物件必須具有完全相同的型別程式碼;否則,將引發 TypeError。
>>> arr = array.array('i', [0, 1, 2, 3, 4]) >>> arr1 = array.array('i',[10,20,30]) >>> arr.extend(arr1) >>> arr array('i', [0, 1, 2, 3, 4, 10, 20, 30])
fromfile()
此方法從檔案物件中讀取 n 個項(作為機器值)並附加到陣列中。
在以下示例中,我們首先以二進位制寫入模式開啟一個檔案。
>>> file = open('test.txt','wb') >>> file.write(b'Hello Python') 12 >>> file.close()
現在我們使用此檔案將其資料附加到陣列物件中。
>>> a = array.array('i') >>> file = open('test.txt','rb') >>> a.fromfile(file,file.tell()) >>> a array('i', [1819043144, 2035294319, 1852794996])
append()
此方法將新項附加到陣列的末尾
fromlist()
此方法將列表中的項附加到陣列。這相當於 for x in list: a.append(x)
>>> a = array.array('i') >>> a.append(10) >>> a array('i', [10]) >>> num = [20,30,40,50] >>> a.fromlist(num) >>> a array('i', [10, 20, 30, 40, 50])
insert()
在指定位置之前插入新項到陣列中
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> a.insert(2,25) >>> a array('i', [10, 20, 25, 30, 40, 50])
pop()
此方法在從陣列中刪除指定索引處的項後返回該項。
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> x = a.pop(2) >>> x 30 >>> a array('i', [10, 20, 40, 50])
remove()
此方法從陣列中刪除給定項的第一次出現。
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> a.remove(30) >>> a array('i', [10, 20, 40, 50])
tofile()
此方法將所有項寫入具有寫入許可權的檔案物件。
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> file = open("test.txt","wb") >>> a.tofile(file) >>> file.close() >>> file = open("test.txt","rb") >>> file.read() b'\n\x00\x00\x00\x14\x00\x00\x00\x1e\x00\x00\x00(\x00\x00\x002\x00\x00\x00'
廣告