前情提示: 測試代碼中,右尖括號(>
)表示命令行中輸入的命令; 單獨一行並以井字符(#
)開頭的爲輸出內容; 庫的導入僅在本文的第一個測試代碼中展示,其餘代碼塊均省略庫的導入代碼。html
Windows 10
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')
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()
將數組中的全部元素字節對調,此方法僅支持大小爲 1
、2
、4
、8
字節的值,其餘的值將報 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 的相關內容。發掘更多原創文章,期待您的關注。