一去枷、列表的作用
列表在Python中是一個(gè)任意類型對(duì)象位置的相關(guān)有序集合,它沒(méi)有固定大小是复,根據(jù)數(shù)據(jù)量的不同可以動(dòng)態(tài)變化删顶。可以對(duì)列表中的數(shù)據(jù)進(jìn)行賦值淑廊、修改逗余、添加、刪除等操作季惩。與C\C++中一維數(shù)組類似录粱,其索引index是從0開始的而不是從1開始的』埃可以對(duì)列表進(jìn)行索引啥繁、切片、分割等操作青抛。
列表的分割通過(guò)設(shè)置索引的頭下標(biāo)和尾下標(biāo)實(shí)現(xiàn)[頭下標(biāo):尾下標(biāo)]旗闽,這樣就可以截取列表中對(duì)應(yīng)范圍內(nèi)的數(shù)值。列表也有其特殊性,列表可以從左向右進(jìn)行索引适室,索引號(hào)默認(rèn)從’0’開始嫡意,列表也可以從右向左進(jìn)行索引,最右側(cè)索引號(hào)尾’-1’捣辆,不要忘記’-‘鹅很,這表明了列表的索引方向;列表也可以混合存儲(chǔ)整型罪帖、浮點(diǎn)型和字符串等類型的數(shù)據(jù)促煮。
二、列表的操作
Python標(biāo)準(zhǔn)庫(kù)中提供了更多對(duì)列表進(jìn)行操作的函數(shù)如:
1整袁、list.len(): 求取列表中元素個(gè)數(shù)
2菠齿、list.append(x): 把元素x添加到列表的結(jié)尾
3、list.extend(L): 將一個(gè)給定列表中的所有元素都添加到另一個(gè)列表中
4坐昙、list.insert(i, x): 在指定位置i處插入一個(gè)元素x绳匀,需要注意的是元素會(huì)插入在原位置元素之前
5、list.remove(x): 刪除列表中值為x的第一個(gè)元素,如果列表中沒(méi)有這樣的元素炸客,就會(huì)返回一個(gè)錯(cuò)誤疾棵。
6、list.pop([i]): 從列表的制定位置刪除元素痹仙,并將其返回是尔。如果沒(méi)有指定索引,a.pop()返回的將是列表中最后一個(gè)元素开仰,元素隨即將從列表中刪除(pop([i])中表示元素i是可選的拟枚,在實(shí)際使用中不需要添加[],在Python的文檔中也常遇到這樣的問(wèn)題)
7、list.index(x): 返回列表中第一個(gè)值為x的元素的索引
#創(chuàng)建一個(gè)列表
list1 = [0,1,2,3,4,5,6,7,8,9]
#求列表的元素個(gè)數(shù)众弓,并賦值給listLength
listLength = len(list1)
#向列表添加一個(gè)元素10
list1.append(10)
#向list1列表中添加一個(gè)列表list2
list3 = ['a','b','c']
list1.extend(list2)
#在指定位置處插入一個(gè)元素
list1.insert(1,'abc')
#刪除list1列表中的值為0的元素
list1.remove(0)
#刪除list1列表中指定的位置元素
element = list1.pop()
#查找list1列表中值為5的位置下標(biāo)
index = list1.index(5)
print('list1 = %s'%list1)
print('listLength = %s'%listLength)
print('element = %s'%element)
print('index =%s '%index)
運(yùn)行結(jié)果:
三恩溅、雙端隊(duì)列(把列表當(dāng)作隊(duì)列使用)
雙端隊(duì)列(Double-ended queue 或稱 deque)在需要按元素增加的順序來(lái)移除元素時(shí)非常有用。collections 模塊中的 deque 類型(它為在首尾兩端快速插入和刪除而設(shè)計(jì))谓娃。雙端隊(duì)列通過(guò)可迭代對(duì)象(比如集合)創(chuàng)建脚乡,而且有些非常用用的方法
from collections import deque #首先從collections 模塊中導(dǎo)入deque類
下來(lái)我們定義一個(gè)雙端隊(duì)列
1、 A=deque([]) #創(chuàng)建一個(gè)空的雙隊(duì)列
2滨达、 A.append(n) #從右邊像隊(duì)列中增加元素 奶稠,n表示增加的元素
3、 A.appendleft(n) #從左邊像隊(duì)列中增加元素弦悉,n表示增加的元素
4窒典、 A.clear() #清空隊(duì)列
5蟆炊、 A.count(n) #在隊(duì)列中統(tǒng)計(jì)元素的個(gè)數(shù)稽莉,n表示統(tǒng)計(jì)的元素
6、 A.extend(n) #從右邊擴(kuò)展隊(duì)列涩搓,n表示擴(kuò)展的隊(duì)列
7污秆、A.extendleft(n) #從左邊擴(kuò)展隊(duì)列劈猪,n表示擴(kuò)展的隊(duì)列
8、 A.pop() #從隊(duì)列的右邊刪除元素良拼,并且返回刪除值
9.战得、A.popleft() #從隊(duì)列的左邊刪除元素,并且返回刪除值
10庸推、A.remove(n) #從隊(duì)列中刪除指定的值
11常侦、A.reverse() #翻轉(zhuǎn)隊(duì)列
12、A.rotate(n) #旋轉(zhuǎn)隊(duì)列贬媒,默認(rèn)時(shí)值為1聋亡,由右邊開始旋轉(zhuǎn),負(fù)值代表左邊旋轉(zhuǎn)际乘,n代表從隊(duì)列的第一個(gè)元素開始坡倔,n從1開始計(jì)數(shù)
>>> from collections import deque
>>> q = deque(range(5))
>>> q.append(5)
>>> q.appendleft(6)
>>> q
deque([6, 0, 1, 2, 3, 4, 5])
>>> q.pop()
5
>>> q.popleft()
6
>>> q.rotate(3) #右移 3 次
19
>>> q
deque([2, 3, 4, 0, 1])
>>> q.rotate(-1) #左移一次
>>> q
deque([3, 4, 0, 1, 2])
雙端隊(duì)列好用的原因是它能有效地在開頭(左側(cè))增加和彈出元素,這是在列表中
無(wú)法實(shí)現(xiàn)的脖含。除此之外罪塔,它還能夠有效地旋轉(zhuǎn)(rotate)元素(也就是將它們左移或右
移,使頭尾相連)养葵。;
四征堪、總結(jié)
1、list是一種可變的數(shù)據(jù)類型关拒,跟整型和字串類型不一樣请契,list中的數(shù)據(jù)可以在內(nèi)存中進(jìn)行修改,整型和字符串類型則不能修改夏醉。
2爽锥、列表操作無(wú)非分成增刪改查四種類型操作,增:append()函數(shù)畔柔,expend()函數(shù)氯夷,insert()函數(shù);刪:remove()函數(shù)靶擦,pop()函數(shù)腮考;改:可以通過(guò)下標(biāo)的方式,對(duì)數(shù)據(jù)進(jìn)行修改玄捕,如list1 = ['a','b','c']踩蔚,list1[0] = 0,得到的結(jié)果為:list1 = [0,'b','c'];查:index()函數(shù)
3枚粘、append()函數(shù)添加元素時(shí)會(huì)追加到列表的末尾馅闽;使用remove()函數(shù)時(shí),如果要?jiǎng)h除的元素并不在列表中,會(huì)報(bào)錯(cuò)福也;pop()函數(shù)默認(rèn)刪除的是列表末尾的元素(即列表最后一個(gè))局骤,返回值為刪除的元素;index()函數(shù)查找時(shí)暴凑,返回要查找元素在列表中的位置下標(biāo)峦甩,如果列表中不存在該元素,會(huì)報(bào)錯(cuò)现喳。