Python3之數組(array)


當我們需要1000萬個浮點數的時候,數組(array)的效率要比列表(list)要高得多,因為數組在背后存的並不是float對象,而是數字的機器翻譯,也就是字節表述。這一點和c語言中的數組一樣。

再比如說,如果需要頻繁對序列做先出先進的操作,collection.deque(雙端隊列)的速度應該會更快。

1.數組

如果我們需要一個只包含數字的列表,那么array.array比list更高效。數組支持所有跟可變序列有關的操作,包括.pop,.insert和.extend。

另外,數組還提供從文件讀取和存入文件的更快的方法,如.frombytes和.tofile。

 
 

Python數組跟C語言數組一樣精簡。創建數組需要一個類型碼,這個類型碼用來表示在底層的C語言應該存放怎樣的數據類型。比如b類型碼代表的是有符號的字符(signedchar),array('b')創建出的數組就只能存放一個字節大小的整數,范圍從-128到127,這樣在序列很大的時候,我們能節省很多空間。

array類型碼如下:

Type code      C Type     Minimum size in bytes
     'b'    signed integer           1
     'B'    unsigned integer         1
     'u'    Unicode character        2 
     'h'    signed integer           2
     'H'    unsigned integer         2
     'i'    signed integer           2
     'I'    unsigned integer         2
     'l'    signed integer           4
     'L'    unsigned integer         4
     'q'    signed integer           8 
     'Q'    unsigned integer         8 
     'f'    floating point           4
     'd'    floating point           8

一個浮點型的數組的創建,存入文件和文件讀取的過程:

>>> from array import array 
>>> from random import random
>>> floats = array('d', (random() for i in range(10**7)))
>>> floats[-1]
0.021901117799701275

>>> fp = open('floats.bin', 'wb')
>>> floats.tofile(fp)
>>> fp.close()

>>> floats_2 = array('d')
>>> fp = open('floats.bin', 'rb')
>>> floats_2.fromfile(fp, 10**7)
>>> fp.close()
>>> floats_2[-1]
0.021901117799701275

>>> floats_2 == floats
True
array創建的數組不適用於數字操作(比如矩陣和矢量運算)。另外+=和*=運算符可以用於array的添加。
從python3.4開始,數組(array)類型不再支持諸如list.sort()這種就地排序方法。要給數組排序的話,得用sorted函數新建一個數組:
>>> import array
>>> a = array.array(a.typecode, sorted(a))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM