Python內置庫:array(簡單數組)


array模塊提供了一種數組概念上的緊湊類型的實現,數組中的元素必須為同一類型,且為基礎數據類型(字符、整數或浮點數),這些元素在內存中是按固定大小(字節)連續存儲的,相比於列表和元組類型,array模塊的實現更加節省內存。但是注意,使用的時候還是需要根據實際情況來看,因為Python對於數字、字符串等基礎數據類型也是做了優化的,不一定array模塊就更節省內存。

>>> import sys
>>> import array
>>> num = 100000
>>> lst = list(i for i in range(num))
>>> sys.getsizeof(lst)
879840
>>> a = array.array('i', lst)  # i表示數組中元素的類型,具體支持的類型見下面的表格
>>> a.itemsize  # 每個元素占用的內存大小,這里為4byte
4
>>> sys.getsizeof(a)  # 可以看到,總的大小為400064=4*num+64,比list類型少了一半多
400064

array支持的數據類型(Type code為array.array的第一個參數)

Type code C Type Python Type Minimun size in bytes
'b' signed char int 1
'B' unsigned char int 1
'u' wchar_t Unicode character 2
'h' signed short int 2
'H' unsigned short int 2
'i' signed int int 2
'I' unsigned int int 2
'l' signed long int 4
'L' unsigned long int 4
'q' signed long long int 8
'Q' unsigned long long int 8
'f' float float 4
'd' double float 8

注:array('u')可能是16位或者32位,這取決於運行的系統。並且在Python3.9之后將棄用之前的Py_UNICODE,而使用現在的wchar_t,但是不影響以前Py_UNICODE的使用,因為Py_UNICODE只是wchar_t的別名。但是會在Python4.0中棄用Py_UNICODE。

array類

array.array(typecode[, initializer]):使用typecode參數創建一個array對象,也可以使用initializer參數初始化一個array對象,initializer必須是一個列表、bytes-like對象或者一個可迭代的對象,不過需要注意這些對象中的元素需要和上面表格中的Python Type匹配。array對象也支持索引、切片、拼接等操作,不過前提是操作的對象的typecode都是同一種類型。
常用的方法和屬性:

  • typecode:array對象的typecode屬性。
  • itemsize:array對象中元素占用的內存大小,單位是byte。
  • append(x):在array對象的末尾添加一個元素x。
  • buffer_info():返回一個元組(address, length),address是array對象的內存地址,length是array對象中元素的個數。可以使用array.buffer_info()[1] * array.itemsize計算出array對象的字節數。
  • count(x):統計x在array對象中出現的次數。
  • extend(iterable):將另一個可迭代對象中的元素添加到當前array對象的末尾,需要注意,可迭代對象的元素類型需要和當前array對象的元素類型匹配,否則會引發TypeError。
  • frombytes(s):將一個字符串當做array對象,並將其中的元素添加到當前array對象中(就像使用fromfile(f, n)從文件中讀取出來的字符串)。(Python3.2更新:fromstring()被重命名為frombytes())。
  • fromfile(f, n):從文件對象中讀取n項,添加到當前array對象的末尾。注意,如果n超出了文件對象本身具有的item數量,則會拋出EOFError,不過文件對象中的item依然會被添加到array對象中。
  • fromlist(list):從將一個列表中的元素添加到當前array對象中,如果列表中的元素類型與array對象不匹配,則會拋出異常,不過此時array對象不會被改變。
  • fromunicode(s):將一個Unicode字符串中的字符添加到當前array對象中,不過此時array對象必須是'u'類型,如果s是其他類型,可以使用array.frombytes(unicodestring.encode(enc))
  • index(x):返回x在array中的第一個索引。
  • insert(i, x):在位置i前插入值x,i允許為負值。
  • pop([i]):從array數組中刪除並返回索引為i的值,i默認為-1。
  • remove(x):從array中移除第一個找到的值x。
  • reverse():反轉array中元素的順序。
  • tobytes():將array轉換為bytes()數組。(Python3.2更新:tostring()被重命名為tobytes())
  • tofile(f):將array對象所有元素寫入文件。
  • tolist():將array對象轉換為list對象。
  • tounicode():將array對象轉換為Unicode字符串,注意,此時array對象必須是'u'類型,如果是其他類型,可以使用array.tobytes().decode(enc)來獲取一個Unicode字符串。


免責聲明!

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



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