array -- 數(shù)值數(shù)組│Python標(biāo)準(zhǔn)庫

前情提示: 測試代碼中凿滤,右尖括號(>)表示命令行中輸入的命令米愿; 單獨(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标沪、48 字節(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)注。

參考資料

官方文檔: https://docs.python.org/zh-cn/3/library/array.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摄悯,一起剝皮案震驚了整個(gè)濱河市赞季,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌射众,老刑警劉巖碟摆,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晃财,死亡現(xiàn)場離奇詭異叨橱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)断盛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門罗洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人钢猛,你說我怎么就攤上這事伙菜。” “怎么了命迈?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵贩绕,是天一觀的道長。 經(jīng)常有香客問我壶愤,道長淑倾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任征椒,我火速辦了婚禮娇哆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勃救。我一直安慰自己碍讨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布蒙秒。 她就那樣靜靜地躺著勃黍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晕讲。 梳的紋絲不亂的頭發(fā)上溉躲,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音益兄,去河邊找鬼锻梳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛净捅,可吹牛的內(nèi)容都是我干的疑枯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛔六,長吁一口氣:“原來是場噩夢啊……” “哼荆永!你這毒婦竟也來了废亭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤具钥,失蹤者是張志新(化名)和其女友劉穎豆村,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骂删,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掌动,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宁玫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粗恢。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欧瘪,靈堂內(nèi)的尸體忽然破棺而出眷射,到底是詐尸還是另有隱情,我是刑警寧澤佛掖,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布妖碉,位于F島的核電站,受9級特大地震影響芥被,放射性物質(zhì)發(fā)生泄漏欧宜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一撕彤、第九天 我趴在偏房一處隱蔽的房頂上張望鱼鸠。 院中可真熱鬧,春花似錦羹铅、人聲如沸蚀狰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麻蹋。三九已至,卻和暖如春焊切,著一層夾襖步出監(jiān)牢的瞬間扮授,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工专肪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刹勃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓嚎尤,卻偏偏與公主長得像荔仁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容