array -- 數值數組│Python標準庫

前情提示: 測試代碼中,右尖括號(>)表示命令行中輸入的命令; 單獨一行並以井字符(#)開頭的爲輸出內容; 庫的導入僅在本文的第一個測試代碼中展示,其餘代碼塊均省略庫的導入代碼。html

  • 系統類型: Windows 10
  • python 版本: Python 3.9.0

array 模塊定義了一種對象類型,能夠緊湊的表示以 字符整數浮點數 等基本類型爲元素組成的數組。array 模塊中定義的數組屬於序列類型,其行爲也與列表類型很是類似,可是數組中的元素的數據類型是受到限制的,只能設置在初始化時指定的某一種類型。python

++PS: 數組與列表、元組等組合數據類型類似,能夠由多個值組成。出於我的習慣,小編把這些值稱爲元素,也就是說,列表、元組等能夠是由多個元素組成的,在本文中也將組成數組的那些值也稱爲元素。++數組

array 模塊在使用時,須要先實例化一個數組對象,而後再進行下一步操做:app

array.array(typecode[, initializer])
'''
參數:
    typecode: 指定當前數組所能接受的元素數據類型
    initializer: 可選參數, 數組初始化時添加的元素, 必須是可迭代對象, 元素的數據類型受參數 typecode 的限制
'''

typecode 參數的值是一個字符,這個字符被稱爲類型碼,其表明一種類型限制,全部的類型碼可使用 array.typecodes 查看:測試

import array

print(array.typecodes)
# bBuhHiIlLqQfd

在上述的例子中,返回值中的每一個字符都是一個類型碼,那麼這些類型碼都是什麼意思呢?命令行

類型碼        C 類型        Python 類型     以字節表示的最小尺寸

 'b'       signed char          int                 1

 'B'      unsigned char         int                 1

 'u'         wchar_t         Unicode 字符           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

接下來就能夠初始化一個數組了:指針

test = array.array('u', 'ABC')
print(test)
# array('u', 'ABC')

初始化的元素類型必定要和設置的類型碼一致,不然將報錯:code

test = array.array('b', 'ABC')
# TypeError: cannot use a str to initialize an array with typecode 'b'

array 模塊的大多數內容都在初始化後的數組對象上展開的,那麼下面將根據功能進行分組介紹。htm

屬性

  • array.typecode: 獲取數組的類型碼
  • array.itemsize: 獲取在內部表示中一個元素的字節長度
test = array.array('u', 'ABC')
print(test.typecode)
# u
print(test.itemsize)
# 2

添加

添加功能比較統一的一點就是都沒有返回值,直接做用於數組自己。對象

  • array.append(x)

將一個值爲 x 的新元素添加到數組的末尾。參數 x 必須是一個符合類型碼的值。

  • array.extend(iterable)

未來自 iterable 可迭代對象中的元素添加到數組的末尾。iterable 可迭代對象中全部元素都符合類型碼。

  • array.fromlist(list)

list 中的元素添加到數組末尾。list 中全部元素都符合類型碼。

  • array.fromunicode(s)

Unicode 字符串添加到數組末尾,數組的類型碼必須是 u,不然將發生 ValueError 錯誤。

  • array.insert(i, x)

將參數 x 插入到在數組中索引爲 i 的位置。若指定參數 i 爲負數,則將元素 x 插入到數組末尾。參數 x 必須是一個符合類型碼的值。

test = array.array('u', 'A')

'''append()'''
test.append('B')
print(test)
# array('u', 'AB')

'''extend()'''
test.extend(['C', 'D'])
print(test)
# array('u', 'ABCD')

'''fromlist()'''
test.fromlist(['E', 'F'])
print(test)
# array('u', 'ABCDEF')

'''fromunicode()'''
test.fromunicode('IJ')
print(test)
# array('u', 'ABCDEFIJ')

'''insert()'''
test.insert(6, 'H')
print(test)
# array('u', 'ABCDEFHIJ')

統計 and 獲取

  • array.count(x)

獲取值爲 x 的元素的個數。參數 x 必須是一個符合類型碼的值。

  • array.index(x)

獲取第一個值爲 x 的元素所在的位置,也就是索引值。參數 x 必須是一個符合類型碼的值。

  • array.pop([i])

將指定索引值的元素從數組中移除並返回,默認移除並返回數組中的最後一個元素。

test = array.array('u', 'ABCABC')

'''count()'''
print(test.count('A'))
# 2

'''index()'''
print(test.index('B'))
# 1

'''pop()'''
print(test.pop())
# C
print(test)
# array('u', 'ABCAB')

機器值、文件相關

  • array.frombytes(s)

將二進制字符串解讀後加入數組末尾。

  • array.fromfile(f, n)

將從文件對象 f 中讀取 n 個元素添加到數組末尾。若是可讀數據少於參數 n,那麼將報 EOFError 錯誤,可是有效的元素仍然會添加到數組中。參數 f 必須是內置文件對象。

  • array.tobytes()

將數組轉換成機器值並返回。

  • array.tofile(f)

將數組轉換成機器值並寫入到文件中。參數 f 必須是內置文件對象。

  • array.byteswap()

將數組中的全部元素字節對調,此方法僅支持大小爲 1248 字節的值,其餘的值將報 RuntimeError 錯誤。

test = array.array('u', 'ABC')
'''tobytes()'''
print(test.tobytes())
# b'A\x00B\x00C\x00'

'''tofile()'''
with open('./test', 'wb+') as f:
    test.tofile(f)
    f.seek(0)                 # 指針移動到文件起始位置
    print(f.read())           # 讀取文件內容
# b'A\x00B\x00C\x00'

'''frombytes()'''
test.frombytes(b'A\x00B\x00C\x00')
print(test)
# array('u', 'ABCABC')

'''fromfile()'''
with open('./test', 'rb+') as f:
    test.fromfile(f, 3)
print(test)
# array('u', 'ABCABCABC')

'''byteswap()'''
test = array.array('u', 'ABC')
test.byteswap()
print(test)
# array('u', '䄀䈀䌀')

轉換

  • array.tolist()

將數組轉換成列表.

  • array.tounicode()

將數組轉換成 Unicode 字符串,數組的類型碼爲 u,不然將報 ValueError 錯誤。

test = array.array('u', 'ABC')
'''tolist()'''
print(test.tolist())
# ['A', 'B', 'C']

'''tounicode()'''
print(test.tounicode())
# ABC

其餘

  • array.buffer_info()

返回一個元組 (address, length) 以給出用於存放數組內容的緩衝區元素的當前內存地址和長度。

  • array.remove(x)

從數組中移除第一個值爲 x 的元素。參數 x 必須是一個符合類型碼的值。

  • array.reverse()

反轉數組內元素的順序。

test = array.array('u', 'ABCABC')

'''buffer_info()'''
print(test.buffer_info())
# (1864606516176, 6)

'''remove()'''
test.remove('C')
print(test)
# array('u', 'ABABC')

'''reverse()'''
test.reverse()
print(test)
# array('u', 'CBABA')

參考資料

官方文檔: https://docs.python.org/zh-cn...

公衆號 : 「python庫詳解」,專一於 python 標準庫與 python 第三方庫的解析教程,以及其餘 python 的相關內容。發掘更多原創文章,期待您的關注。

相關文章
相關標籤/搜索