陣列 — 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_UNICODEUnicode 字元
'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'

更新於: 2019年7月30日

231 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告