麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > Python > 正文

Python中的array模塊

2023-04-24 19:21:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Python并沒(méi)有像其他語(yǔ)言那樣直接提供了數(shù)組(array)這種數(shù)據(jù)結(jié)構(gòu),而是通過(guò)導(dǎo)入array模塊來(lái)完成數(shù)組的相關(guān)操作。

在Python中沒(méi)有直接引入數(shù)組,也是由于Python中提供了列表這種數(shù)據(jù)結(jié)構(gòu),支持像數(shù)組一樣的元素插入、修改和刪除等操作。

但Python列表中的元素可以具有不同的數(shù)據(jù)類型,這一點(diǎn)與數(shù)組是不同的。如果想即使如此,額外提供一種數(shù)據(jù)結(jié)構(gòu)來(lái)解決這種問(wèn)題也沒(méi)有必要。

Python array模塊

一、Python中的array模塊

Python中的array模塊允許我們創(chuàng)建一個(gè)具有數(shù)據(jù)類型約束的數(shù)組,而且Python的array模塊僅支持幾類數(shù)據(jù)類型。其支持的數(shù)據(jù)類型主要有以下幾種:

類型碼 對(duì)應(yīng)的C類型 Python類型 最小字節(jié)數(shù)
'b' signed char int 1
'B' unsigned char int 1
'u' Py_UNICODE 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' float float 8

其中,'u' 對(duì)應(yīng)Python中已過(guò)時(shí)的unicode字符(Py_UNICODE),這種類型在Python3.3中被棄用,也將在4.0中被刪除。如此以來(lái),在array模塊中只剩下整數(shù)類型或float類型。

二、創(chuàng)建數(shù)組

在創(chuàng)建和使用數(shù)組時(shí),首先需要引入array模塊。

創(chuàng)建數(shù)組的語(yǔ)法格式如下:

array.array( typecode[, initializer])

其含義是使用typecode給出數(shù)組元素的類型,并由initializer進(jìn)行初始化。

typecode參數(shù)即是上表給出的類型碼,用于指定數(shù)組元素的類型。

initializer是可選參數(shù),用于初始化數(shù)組的參數(shù),該參數(shù)必須是一個(gè)列表,或字節(jié)類對(duì)象或可迭代類型。

下面給出一些具體的例子。

import array

array1 = array.array('i', [11,12,13,14])
array2 = array.array('B', [97,98,99,49,50])
array3 = array.array('f', [1.1,1.2,1.3,1.4])

上面的例子創(chuàng)建了2個(gè)整型數(shù)組單精度的浮點(diǎn)數(shù)數(shù)組。

雖然,'B'在C中對(duì)應(yīng)的是無(wú)符號(hào)字符類型,但在Python中對(duì)應(yīng)的是int類型,所以其元素的類型需要是整數(shù)類型。

三、輸出數(shù)組及類型

下面使用print輸出數(shù)組的類型及用于初始化的元素,同時(shí)使用typecode屬性可以獲取創(chuàng)建數(shù)組時(shí)指定的類型字符。

print(array1)
print(array2)
print(array3.typecode)
print(array2.typecode)
print(type(array2))

輸出結(jié)果如下:

array('i', [11, 12, 13, 14])
array('b', [97, 98, 99, 49, 2])
f
b
<class 'array.array'>

上面的例子中,type()函數(shù)是一個(gè)內(nèi)置函數(shù),用于輸出對(duì)象的類型。

四、訪問(wèn)數(shù)組中的元素

我們可以使用循環(huán)語(yǔ)句輸出數(shù)組中的每個(gè)元素,也可以使用數(shù)組索引來(lái)訪問(wèn)數(shù)組中的特定元素。

import array
ara = array.array('i', [11,12,13,14])

for e in ara:
    print(e)

print(f'ara[2] = {ara[2]}/n'#輸出索引為2的元素值

#使用索引循環(huán)輸出每個(gè)元素
for i in range(0, len(ara)):
    print(f'ara[{i}] = {ara[i]}')

結(jié)果如下:

11
12
13
14
ara[2] = 13

ara[0] = 11
ara[1] = 12
ara[2] = 13
ara[3] = 14

注意:python的數(shù)組索引也是從0開(kāi)始的,如果索引越界,將引發(fā)IndexError錯(cuò)誤。

五、向數(shù)組中插入或追加元素

我們可以使用insert()函數(shù)在數(shù)組指定索引處插入一個(gè)新元素,指定索引處的原元素將向后(右)移動(dòng)一個(gè)位置。insert()函數(shù)的語(yǔ)法格式如下:

array.insert(i, x)

在數(shù)組 array 的 i 位置之前插入一個(gè)新元素 x i 代表插入的位置, x 代表要插入的元素值。

我們也可以使用append()函數(shù)在數(shù)組末尾追加一個(gè)元素。append()函數(shù)的語(yǔ)法格式如下:

array.append(x)

在數(shù)組array的尾端追加一個(gè)新元素。即, x 為要追加的元素值。

下面是兩個(gè)函數(shù)使用的一個(gè)例子:

import array

a = array.array('i',[11,12,13,14])
print(f'原數(shù)組:{a}')

a.insert(2, 131)
print(f'插入元素后:{a}')

a.append(15)
print(f'追加新元素后:{a}')

輸出結(jié)果如下:

原數(shù)組:array('i', [11, 12, 13, 14])
插入元素后:array('i', [11, 12, 131, 13, 14])
追加新元素后:array('i', [11, 12, 131, 13, 14, 15])

六、從數(shù)組中刪除一個(gè)元素

我們可以使用remove()函數(shù)刪除指定的元素。remove函數(shù)的語(yǔ)法格式如下:

array.remove(x)

該函數(shù)的作用是從數(shù)組array中刪除第一個(gè)值為 x 的元素。

import array

array4 = array.array('i', [11,12,13,14,13])
print(f'刪除前:{array4}')
array4.remove(13)
print(f'刪除后:{array4}')

執(zhí)行結(jié)果如下所示:

刪除前:array('i', [11, 12, 13, 14, 13])
刪除后:array('i', [11, 12, 14, 13])

我們也可以使用pop()函數(shù)移除指定位置處的元素。pop函數(shù)的語(yǔ)法如下:

return_value = array.pop([i])

該函數(shù)的作用是移除索引 i 處的元素,并返回該元素值。 i 默認(rèn)為 -1,即省略i時(shí),默認(rèn)是移除數(shù)組尾端的元素。

import array

array5 = array.array('i', [11,12,13,14,15])
print(f'操作前:{array5}')
rtn = array5.pop()
print(f'操作后:{array5},移除的元素為:{rtn}')
rtn = array5.pop(2)
print(f'array5.pop(2)={rtn},操作后的數(shù)組:{array5}')

運(yùn)行的結(jié)果如下:

操作前:array('i', [11, 12, 13, 14, 15])
操作后:array('i', [11, 12, 13, 14]),移除的元素為:15
array5.pop(2)=13,操作后的數(shù)組:array('i', [11, 12, 14])

注意:在使用remove進(jìn)行操作時(shí),如果指定的元素值在數(shù)組中不存在時(shí)會(huì)引發(fā)ValueError錯(cuò)誤。

七、從數(shù)組中查找指定的元素

我們可以使用Index()函數(shù)在數(shù)組中查找指定的元素值。index()函數(shù)的語(yǔ)法格式如下:

array.index(x[, start[, stop]])

其中,x為要查找的元素值,start為搜索的起始位置,stop為搜索的停止位置。

該函數(shù)將返回第一個(gè)匹配的元素索引,如果數(shù)組中不存在指定的x值,將引發(fā)ValueError錯(cuò)誤。

下面是index()函數(shù)使用的一個(gè)例子:

import array

array6 = array.array('i',[11,12,13,14,15])
pos = array6.index(13)
try:
    print(f'13的索引是{pos}')
except ValueError as ve:
    print('數(shù)組中不存在13')

運(yùn)行結(jié)果如下:

13的索引是2

八、修改指定索引處的值

我們可以使用數(shù)組索引的方式通過(guò)賦值來(lái)修改數(shù)組指定索引處的值。

import array

array7 = array.array('i', [11, 12, 13, 14, 15])
array7[2] = 3
array7[3] = 4
print(f'修改后的數(shù)組為:{array7}')

try:
   array7[5] = 5
except IndexError as ie:
  print('數(shù)組索引使用出現(xiàn)錯(cuò)誤。')

輸出結(jié)果如下:

修改后的數(shù)組為:array('i', [11, 12, 3, 4, 15])
數(shù)組索引使用出現(xiàn)錯(cuò)誤。

九、使用extend()函數(shù)擴(kuò)展數(shù)組

我們可以使用extend()函數(shù)將一個(gè)可迭代對(duì)象追加到數(shù)組的尾端。

extend()函數(shù)的語(yǔ)法格式如下:

array.extend(iterable)

iterable中為數(shù)組尾端追加新元素。如果iterable是數(shù)組的話,iterable必須與被追加元素的數(shù)組具有相同的類型碼,否則,將引發(fā)TypeError錯(cuò)誤;如果iterable不是數(shù)組,則iterable必須是可迭代的,同時(shí)iterable的元素類型需與數(shù)組具有相同的類型。

import array

array8 = array.array('i', [11,12,13])
array9 = array.array('i', [14,15,16,17])

array8.extend(array9)
print(array8)

array9.extend([18,19])
print(array9)

array9.extend(set([20,21,22]))
print(array9)

輸出結(jié)果如下:

array('i', [11, 12, 13, 14, 15, 16, 17])
array('i', [14, 15, 16, 17, 18, 19])
array('i', [14, 15, 16, 17, 18, 19, 20, 21, 22])

十、使用數(shù)組的負(fù)向索引操作數(shù)組

數(shù)組也支持負(fù)向索引,即從后端開(kāi)始訪問(wèn)數(shù)組中的元素。數(shù)組元素、正向索引及負(fù)向索引的關(guān)系可以由下圖來(lái)表示。

數(shù)組的負(fù)向索引

import array

array_a =  array.array('i', [11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
print(f'array_a[9] = {array_a[9]}');
print(f'array_a[-1] = {array_a[-1]}');

輸出結(jié)果如下:

array_a[9] = 20
array_a[-1] = 20

十一、對(duì)數(shù)組進(jìn)行切片操作

Python數(shù)組也支持切片操作,返回?cái)?shù)組若干元素的一個(gè)新數(shù)組。此操作不會(huì)改變?cè)瓟?shù)組。同時(shí)切片操作也支持負(fù)向索引。

import array

array_b = array.array('i', [1, 2, 3 ,4, 5, 6, 7])

print(array_b[2:])
print(array_b[2:5])
print(array_b[:4])
print(array_b[-3:])
print(array_b[-5:-2])
print(array_b[:-2])

輸出結(jié)果如下:

array('i', [3, 4, 5, 6, 7])
array('i', [3, 4, 5])
array('i', [1, 2, 3, 4])
array('i', [5, 6, 7])
array('i', [3, 4, 5])
array('i', [1, 2, 3, 4, 5])

關(guān)于Python切片操作的更多知識(shí)可以參看本站中的另外一篇文章:全面掌握Python字符串切片方法

十二、返回?cái)?shù)組中某元素的個(gè)數(shù)

我們可以使用count()函數(shù)返回?cái)?shù)組中特定元素的個(gè)數(shù)。

import array

array_c = array.array('i', [11,12,11,13,12,11])
print(array_c.count(11))  # 3
print(array_c.count(15)) # 0

十三、翻轉(zhuǎn)一個(gè)數(shù)組

我們可以使用reverse()函數(shù)對(duì)數(shù)組進(jìn)行翻轉(zhuǎn)操作。即翻轉(zhuǎn)數(shù)組元素的順序。

import array

array_d = array.array('i', [11, 12, 13, 14, 15])
array_d.reverse()
print(array_d)

輸出結(jié)果如下:

array('i', [15, 14, 13, 12, 11])

十四、把數(shù)組轉(zhuǎn)換為列表

我們可以使用tolist()函數(shù)把數(shù)組轉(zhuǎn)換成具有相同項(xiàng)的普通列表。

import array

array_e = array.array('i', [11, 12, 13, 14, 15])
lst = array_e.tolist()
print(lst)

輸出結(jié)果如下:

[11, 12, 13, 14, 15]

十五、獲取數(shù)組元素的個(gè)數(shù)

我們可以使用Python內(nèi)置函數(shù)len()獲取數(shù)組中元素的個(gè)數(shù)。

import array

array_f = array.array('i', [11, 12, 13, 14, 15])
print(len(array_f))  # 5

十六、獲取數(shù)組元素所占的字節(jié)數(shù)

我們可以使用array.itemsize來(lái)獲取數(shù)組中每個(gè)元素所占的字節(jié)數(shù)。

import array

array_g = array.array('i', [11, 12, 13, 14, 15])
print(array_g.itemsize)  # 4
array_h = array.array('q', [11, 12, 13, 14, 15])
print(array_h.itemsize)  # 8

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 深夜福利视频免费观看 | 国产精品成人亚洲一区二区 | 欧美大胆xxxx肉体摄影 | 九九精品视频观看 | 99国产精成人午夜视频一区二区 | 成人午夜视屏 | 中文字幕线观看 | 精品国产一区二区三区四 | 国产精品久久久久久久久久尿 | 国产女同玩人妖 | 国产精品免费一区二区 | 国产系列 视频二区 | 国产亚洲精品视频中文字幕 | www.9191.com| 激情亚洲一区二区 | h视频免费看 | 国产欧美在线一区二区三区 | 黄色片网站在线看 | 成人爱爱电影 | 精品二区在线观看 | 九九综合视频 | 国产精品9191 | 成人情欲视频在线看免费 | 精品亚洲综合 | 99精品在线视频观看 | 天天舔夜夜操 | 精品一区二区三区日本 | 国产一级在线免费观看 | 久久午夜免费视频 | 欧美日韩后 | 超碰97国产在线 | av亚洲在线观看 | www.99xxxx.com | 国产在线地址 | 成人视屏在线 | 日韩电影av在线 | 视频一区二区三区视频 | 欧美成年私人网站 | 日本视频在线免费观看 | freexxxhd喷水| 欧美日韩手机在线观看 |