前情提示: 測試代碼中凿滤,右尖括號(>
)表示命令行中輸入的命令米愿; 單獨(dú)一行并以井字符(#
)開頭的為輸出內(nèi)容威始; 庫的導(dǎo)入僅在本文的第一個(gè)測試代碼中展現(xiàn),其他代碼塊均省略庫的導(dǎo)入代碼肤寝。
-
系統(tǒng)類型:
Windows 10
-
python 版本:
Python 3.9.0
array
模塊定義了一種對象類型当辐,可以緊湊的表示以 字符
、整數(shù)
鲤看、浮點(diǎn)數(shù)
等基本類型為元素組成的數(shù)組缘揪。array
模塊中定義的數(shù)組屬于序列類型,其行為也與列表類型非常相似义桂,但是數(shù)組中的元素的數(shù)據(jù)類型是受到限制的找筝,只能設(shè)置在初始化時(shí)指定的某一種類型。
++PS: 數(shù)組與列表慷吊、元組等組合數(shù)據(jù)類型相似袖裕,可以由多個(gè)值組成。出于個(gè)人習(xí)慣溉瓶,小編把這些值稱為元素急鳄,也就是說,列表堰酿、元組等可以是由多個(gè)元素組成的疾宏,在本文中也將組成數(shù)組的那些值也稱為元素。++
array
模塊在使用時(shí)触创,需要先實(shí)例化一個(gè)數(shù)組對象坎藐,然后再進(jìn)行下一步操作:
array.array(typecode[, initializer])
'''
參數(shù):
typecode: 指定當(dāng)前數(shù)組所能接受的元素?cái)?shù)據(jù)類型
initializer: 可選參數(shù), 數(shù)組初始化時(shí)添加的元素, 必須是可迭代對象, 元素的數(shù)據(jù)類型受參數(shù) typecode 的限制
'''
typecode
參數(shù)的值是一個(gè)字符,這個(gè)字符被稱為類型碼哼绑,其代表一種類型限制顺饮,所有的類型碼可以使用 array.typecodes
查看:
import array
print(array.typecodes)
# bBuhHiIlLqQfd
在上述的例子中,返回值中的每個(gè)字符都是一個(gè)類型碼凌那,那么這些類型碼都是什么意思呢?
類型碼 C 類型 Python 類型 以字節(jié)表示的最小尺寸
'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
接下來就可以初始化一個(gè)數(shù)組了:
test = array.array('u', 'ABC')
print(test)
# array('u', 'ABC')
初始化的元素類型一定要和設(shè)置的類型碼一致兼雄,否則將報(bào)錯(cuò):
test = array.array('b', 'ABC')
# TypeError: cannot use a str to initialize an array with typecode 'b'
array
模塊的大多數(shù)內(nèi)容都在初始化后的數(shù)組對象上展開的,那么下面將根據(jù)功能進(jìn)行分組介紹帽蝶。
屬性
-
array.typecode
: 獲取數(shù)組的類型碼 -
array.itemsize
: 獲取在內(nèi)部表示中一個(gè)元素的字節(jié)長度
test = array.array('u', 'ABC')
print(test.typecode)
# u
print(test.itemsize)
# 2
添加
添加功能比較統(tǒng)一的一點(diǎn)就是都沒有返回值赦肋,直接作用于數(shù)組本身。
array.append(x)
將一個(gè)值為 x
的新元素添加到數(shù)組的末尾励稳。參數(shù) x
必須是一個(gè)符合類型碼的值佃乘。
array.extend(iterable)
將來自 iterable
可迭代對象中的元素添加到數(shù)組的末尾。iterable
可迭代對象中所有元素都符合類型碼驹尼。
array.fromlist(list)
將 list
中的元素添加到數(shù)組末尾趣避。list
中所有元素都符合類型碼。
array.fromunicode(s)
將 Unicode
字符串添加到數(shù)組末尾新翎,數(shù)組的類型碼必須是 u
程帕,否則將發(fā)生 ValueError
錯(cuò)誤住练。
array.insert(i, x)
將參數(shù) x
插入到在數(shù)組中索引為 i
的位置。若指定參數(shù) i
為負(fù)數(shù)愁拭,則將元素 x
插入到數(shù)組末尾讲逛。參數(shù) x
必須是一個(gè)符合類型碼的值。
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')
統(tǒng)計(jì) and 獲取
array.count(x)
獲取值為 x
的元素的個(gè)數(shù)岭埠。參數(shù) x
必須是一個(gè)符合類型碼的值盏混。
array.index(x)
獲取第一個(gè)值為 x
的元素所在的位置,也就是索引值惜论。參數(shù) x
必須是一個(gè)符合類型碼的值许赃。
array.pop([i])
將指定索引值的元素從數(shù)組中移除并返回,默認(rèn)移除并返回?cái)?shù)組中的最后一個(gè)元素馆类。
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')
機(jī)器值图焰、文件相關(guān)
array.frombytes(s)
將二進(jìn)制字符串解讀后加入數(shù)組末尾。
array.fromfile(f, n)
將從文件對象 f
中讀取 n
個(gè)元素添加到數(shù)組末尾蹦掐。如果可讀數(shù)據(jù)少于參數(shù) n
技羔,那么將報(bào) EOFError
錯(cuò)誤,但是有效的元素仍然會(huì)添加到數(shù)組中卧抗。參數(shù) f
必須是內(nèi)置文件對象藤滥。
array.tobytes()
將數(shù)組轉(zhuǎn)換成機(jī)器值并返回。
array.tofile(f)
將數(shù)組轉(zhuǎn)換成機(jī)器值并寫入到文件中社裆。參數(shù) f
必須是內(nèi)置文件對象拙绊。
array.byteswap()
將數(shù)組中的所有元素字節(jié)對調(diào),此方法僅支持大小為 1
泳秀、2
标沪、4
、8
字節(jié)的值嗜傅,其他的值將報(bào) RuntimeError
錯(cuò)誤金句。
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) # 指針移動(dòng)到文件起始位置
print(f.read()) # 讀取文件內(nèi)容
# 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', '???')
轉(zhuǎn)換
array.tolist()
將數(shù)組轉(zhuǎn)換成列表.
array.tounicode()
將數(shù)組轉(zhuǎn)換成 Unicode
字符串,數(shù)組的類型碼為 u
吕嘀,否則將報(bào) ValueError
錯(cuò)誤违寞。
test = array.array('u', 'ABC')
'''tolist()'''
print(test.tolist())
# ['A', 'B', 'C']
'''tounicode()'''
print(test.tounicode())
# ABC
其他
array.buffer_info()
返回一個(gè)元組 (address, length)
以給出用于存放數(shù)組內(nèi)容的緩沖區(qū)元素的當(dāng)前內(nèi)存地址和長度。
array.remove(x)
從數(shù)組中移除第一個(gè)值為 x
的元素偶房。參數(shù) x
必須是一個(gè)符合類型碼的值趁曼。
array.reverse()
反轉(zhuǎn)數(shù)組內(nèi)元素的順序。
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')
公眾號 : 「python雜貨鋪」棕洋,專注于 python 語言及其相關(guān)知識挡闰。發(fā)掘更多原創(chuàng)文章,期待您的關(guān)注。