Python中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)有l(wèi)ist, tuple,dictionary, set
- list
前面的文章中介紹過(guò)list, 這里再詳細(xì)的介紹一下list對(duì)象中的方法
1.1 list.append(x)
在列表的末尾添加一個(gè)元素樟蠕,只能添加一個(gè)。如果 a 是一個(gè)列表鹅士,則 a.append(x)等同于 a[len(a):] = [x]
1.2 list.extend(iterable)
把可迭代對(duì)象中的所有元素添加到原列表的末尾管削,等同于a[len(a):] = iterable
1.3 list.insert(i,x)
在列表指定位置添加一個(gè)元素心俗,i是索引編號(hào)井仰, x 是要添加的元素峰尝,當(dāng) i = len(a)的時(shí)候儒旬,該 方法的功能等同于append()
1.4 list.remove(x)
把列表中的第一次出現(xiàn)的x元素從列表中移除温兼,如果沒(méi)有此元素則會(huì)報(bào)錯(cuò),如果有多個(gè)相同的x元素秸滴,只會(huì)移除第一個(gè)
1.5 list.pop([i])
把列表中索引為i的元素移除,如果沒(méi)有此索引募判,則會(huì)報(bào)錯(cuò)荡含,如果沒(méi)有提供索引,則會(huì)默認(rèn)移除列表中的最后一個(gè)元素届垫。該方法中释液,參數(shù)[i]中的中括號(hào)代表該參數(shù)是可選參數(shù)
1.6 list.clear()
清空列表,清空后的列表對(duì)象仍然存在,只不過(guò)是一個(gè)空列表
1.7 list.index(x [, start [, end] ])
返回第一個(gè)x元素的索引装处,如果沒(méi)有該元素误债,則報(bào)錯(cuò)。注意妄迁,只返回第一個(gè)寝蹈,可選參數(shù),start, end用來(lái)限定列表的搜索范圍
1.8 list.count(x)
返回元素 x 在列表中出現(xiàn)的次數(shù)
1.9 list.sort( key = None, reverse = False)
對(duì)列表中的元素進(jìn)行排序登淘,默認(rèn)是升序箫老,即從小到大
1.10 list.reverse()
把列表倒置,即第一個(gè)元素變?yōu)樽詈笠粋€(gè)元素地来,以此類推
1.11 list.copy()
返回list的一個(gè)淺拷貝史煎,關(guān)于淺拷貝與深拷貝的區(qū)別碉钠,請(qǐng)參見(jiàn)https://www.cnblogs.com/xueli/p/4952063.html
1.12 用list 實(shí)現(xiàn)堆
堆具有后進(jìn)先出(先進(jìn)后出)的特點(diǎn),append() 方法添加一個(gè)元素到堆末牲蜀, pop() 方法把堆末的元素移除,所以列表用append() 和 pop() 方法輕松實(shí)現(xiàn) 堆的功能
1.13 用list實(shí)現(xiàn)隊(duì)列
隊(duì)列具有先進(jìn)先出的特點(diǎn)绅这,同樣也可以用append() 和 pop() 方法實(shí)現(xiàn)隊(duì)列的功能涣达,但這樣的效率不高,python中君躺, collections.deque 是列高效得實(shí)現(xiàn)隊(duì)列的方法峭判,應(yīng)用到的主要方法是queue = deque(list), append(), 和 leftpop()方法
1.14 列表推導(dǎo)式(list comprehensions)
列表推導(dǎo)式是一種更簡(jiǎn)潔得創(chuàng)建列表的方法,多用于從一個(gè)序列或可迭代對(duì)象中經(jīng)過(guò)某些操作創(chuàng)造一個(gè)列表棕叫,例如創(chuàng)建一個(gè)1-10之間每個(gè)數(shù)的平方組成的列表:
傳統(tǒng)方法:
用列表推導(dǎo)式的方法:
1.15 嵌套的列表推導(dǎo)式
嵌套列表就是一個(gè)列表中的每個(gè)元素仍然是列表林螃,如下:
matrix = [
[1, 2, 3, 4],
. [5, 6, 7, 8],
[9, 10, 11, 12],
]
嵌套的列表推導(dǎo)式就是用兩重或多重的推導(dǎo)式來(lái)創(chuàng)建一個(gè)列表,如把上述的列表轉(zhuǎn)置變成
matrix2 = [
[1, 5, 9],
[2, 6, 10],
[3, 7, 11],
[4, 8, 12]
]
可以用如下列表推導(dǎo)式:
[ [ row[i] for row in matrix ] for i in range(4) ]
列表推導(dǎo)式有更多花樣的用法俺泣,以后的實(shí)踐中會(huì)逐漸發(fā)現(xiàn)python中用推導(dǎo)式的簡(jiǎn)潔
- del 聲明
del 聲明可以用來(lái)刪除指定的元素
a = [1,2,3,4,5]
del a[0] #刪除列表的第一個(gè)元素
del a[1:3] #刪除列表切片中的元素
del a[:] # 刪除列表中的全部元素疗认,相當(dāng) 于 a.clear()完残, 列表仍存在,但是空列表
del a # 刪除列表a, 與del a[:]的區(qū)別是横漏,變量a也會(huì)沒(méi)有
- 元組
3.1 幾個(gè)逗號(hào)分隔的值組成的元素是元組谨设。例如:
t = 123, 456, 'hello'
3.2 元組和列表類似,也可嵌套缎浇,也有索引扎拣,但一個(gè)顯著的差別是元組是不可變的,例如:
t[0] = 321 就會(huì)報(bào)錯(cuò)
元組雖然不可變素跺,但是元組中的元素可以是可變對(duì)象二蓝,例如由列表組成的元組:
t2 = ([1,2,3], [4,5,6])
3.3 空元組和只含有一個(gè)元素的元組
t3 = () # 空元組
t4 = (123, ) # 只含有一個(gè)元素的元組,用逗號(hào)隔開(kāi)
3.4 元組的分解
如果說(shuō) t = 123,456, 'hello' 是一個(gè)打包的過(guò)程指厌,那么相反的過(guò)程就是:
x, y, t = t
這種分解方法適用于所有序列的分解刊愚,需要注意的是要保存等號(hào)兩邊的元素?cái)?shù)量相等
多重賦值,a, b = 1, 2 也是利用了tuple的生成和分解
- 集合(set)
由不重復(fù)的元素組成的無(wú)序序列就是集合
集合的創(chuàng)建:
(1) set() 方法
(2) 通過(guò) { } 來(lái)創(chuàng)建踩验,創(chuàng)建0元素集合只能用 set() 方法
s1 = {'a', 'b', 'c'} s2 = {'c', 'd', 'e'}
集合也以進(jìn)行合集鸥诽,差集,補(bǔ)集箕憾,交集等數(shù)學(xué)運(yùn)算
s1 & s2 # 交集
s1 | s2 # 合集
s1 - s2 # 差集
s1 ^ s2 # 交集取反
集合也可以利用推導(dǎo)式:
a = {x for x in s1 if x not in s2}
- 字典(dictionary)
5.1 字典是由鍵值對(duì)為元素組成的一種數(shù)據(jù)結(jié)構(gòu)牡借,字典的鍵是不可變的數(shù)據(jù)結(jié)構(gòu),通常是用數(shù)字厕九,字符串或元組來(lái)作為字典的鍵蓖捶,列表不能作為字典的鍵,因?yàn)榱斜硎强勺兊?/li>
5.2 創(chuàng)建字典的方式:(1)通過(guò){ }來(lái)創(chuàng)建 (2)通過(guò)dict() 方法來(lái)創(chuàng)建
5.3 del 可以刪除字典的元素扁远,如:
dic = { 1: 'hello', 2: 'world' }
del dic[1]
5.4 list(dic) 可以返回一個(gè)由字典中的所有鍵組成的列表
5.5 推導(dǎo)式來(lái)創(chuàng)建字典
{x: x **2 for x in range(1:5)}
5.6 當(dāng)關(guān)鍵字是簡(jiǎn)單字符串時(shí)俊鱼,直接用關(guān)鍵字參數(shù)來(lái)生成字典
dict(a = 1, b = 2)
- 循環(huán)的技巧
6.1 字典中的循環(huán)
dic = { 1: 'hello', 2: 'world' }
for k, v in dic:
print(k,v)
6.2 序列循環(huán)中,使用enumerate() 方法把序列的值及其索引一并取出
for i, v in enumerate(['a', 'b', 'c']):
print(v)
6.3 循環(huán)多個(gè)序列時(shí)畅买,使用zip() 函數(shù)把多個(gè)序列中的元素一一對(duì)應(yīng)取出:
for v1,v2 in zip(list1, list2):
print(v1, v2)
6.4 對(duì)一個(gè)序列進(jìn)行操作后再循環(huán)并闲,可以利用python內(nèi)置函數(shù),如:
reversed() # 倒序一個(gè)序列
sorted() # 排序一個(gè)序列
- 比較操作符
7.1 比較操作可以傳遞
a < b == c # a <b 并且」刃摺b=c
7.2 not 是取反操作
7.3 比較操作符可有優(yōu)先級(jí)
優(yōu)先級(jí)順序:not and, or
- 序列比較
序列對(duì)象與相同類型的其它對(duì)象進(jìn)行比較帝火,先比較第一個(gè)元素,相同的話再比較下一個(gè)元素湃缎,直到分出大小或其中一個(gè)序列耗盡犀填。兩上序列中的每一個(gè)元素都相等,則認(rèn)為兩個(gè)序列相等嗓违。