python的五種數(shù)據(jù)結(jié)構(gòu)

Python有四種數(shù)據(jù)結(jié)構(gòu),這里再加上字符串,所以共有五種:

字符串(string)、列表(list)、元組(tuple)、字典(dictionary)和集合(set)。

加上字符串是因為它與其它數(shù)據(jù)結(jié)構(gòu)有些相似的地方,放進(jìn)來一起講比較方便。

一、定義方法

字符串用引號

例如:name='Swaroop'

列表用方括號

例如:shoplist=['apple','mango','carrot','banana']

元組用圓括號

例如:zoo=('python','elephant','penguin')

但元組在定義時,也可以不用括號,例如:

Number=1,2,3,4,5

特別地,如果元組中只有一個元素,它后面需要一個逗號

例如:aNumber=1,

當(dāng)用print輸出時,元組有圓括號,所以,用圓括號括住是常規(guī)狀態(tài)。

字典用花括號

例如:ab={

'Swaroop':'swaroop@swaroopch.com',

'Larry':'larry@wall.org',

'Matsumoto':'matz@ruby-lang.org',

'Spammer':'spammer@hotmail.com'

}

字典的每個元素有兩個成份:鍵值和值。在定義時要成對地指定鍵值與值(前面的是鍵值,后一個是值)。

每一對之中用冒號隔開,各對用逗號隔開。

集合用set()方法

這是與前面的數(shù)據(jù)結(jié)構(gòu)都不一樣的地方。

例如:bri = set(['brazil', 'russia', 'india'])

注意參數(shù)的形式跟列表一樣。

二、分類

1 可變與不可變

列表、字典和集合是可變的。它們的元素可以修改,可以添加、刪除元素。

字符串和元組是不可變的,里面的元素不可以修改,也不可以添加、刪除元素。

2 序列與非序列

列表、元組和字符串是序列。

序列同時具有三個特點:

(1)in和not in運算符測試元素資格(在與不在)。

(2)有索引操作,可以直接獲取序列中的元素。

(3)有切片操作,取序列中的一部分。

字典和集合不是序列。

字典和集合都有(1),但沒有(2)和(3)

三、訪問元素的方法

序列可以用數(shù)字下標(biāo)訪問元素,非序列不可以用這種方法。

字典,用鍵值訪問值,例如:ab['Swaroop']。

集合不可以訪問到里面的元素。

四、刪除

1 都可以整體刪除,用del

2 列表、字典和集合都可以刪除其中的元素,字符串和元組不可以。

(1)列表用del刪除元素,例如:del shoplist[0]

(2)字典用del刪除元素,例如:del ab[’Spammer’]

(3)集合用remove方法,例如:bri.remove(’India’)

五、添加成員

元組和字符串不可變,所以不能添加成員。

1 列表,用append()方法

例:shoplist.append('rice')

2 字典,直接輸入

例:ab['Guido']='guido@python.org'#添加成員

3 集合,用add()方法

例:bric.add('china')

六、都可以用print方法整體輸出

1 字符串顯示內(nèi)容,沒有引號

2 列表要顯示方括號

3 元組要顯示圓括號

4 字典要顯示花括號

5 集合要顯示花括號(注意它定義時,參數(shù)用的是方括號)

七、賦予變量和產(chǎn)生副本

1 字符串名如果賦予另一個變量,會產(chǎn)生一個副本。沒有兩個變量指向同一個字符串的情況。

2 元組名賦予另一個變量,會產(chǎn)生一個副本。沒有兩個變量指向同一個元組的情況。

3 列表名賦予一個變量,則它們指向同一個列表,并沒有產(chǎn)生新的列表。也就是說,這個列表有了兩個名字。

要產(chǎn)生副本,使用切片操作。例如:

s=shoplist[:]

4 字典名賦予另一個變量,它們指向同一個字典。要產(chǎn)生副本,使用copy()方法。例如:

a=ab.copy()

5 集合名賦予另一個變量,它們指向同一個集合。要產(chǎn)生副本,使用copy()方法。例如:

b=bri.copy()

八、元素個數(shù)都用方法len()

九、遍歷

五種數(shù)據(jù)結(jié)構(gòu)都可以使用遍歷,方法類似。

注意字典的一個元素有兩個成分。

for item in shoplist:#shoplist是一個列表

print(item,end=' ')

for item in zoo:#zoo是一個元組

print(item,end=' ')

for item in name:#name是一個字符串

print(item,end=' ')

for n,a in ab.items():#name是一個字典

print('Contact {} at {}'.format(n,a))

for x in bri:#bri是一個集合

Print(x)

十、切片運算(序列具有)

參數(shù)用方括號表達(dá)一個區(qū)間。

1 完整參數(shù)

方括號里面有三個數(shù)值,用冒號隔開。

第一、二個是下標(biāo),給出一個左閉右開的區(qū)間,即從第一個下標(biāo)開始,到第二個下標(biāo)的前一個終止。

例如[1:3]的意義是1,2。

第三個數(shù)值的意義是步長,省略了就是1。例如[1:3]相當(dāng)于[1:3:1]。

2 省略

方括號里面還可以省略到一個數(shù)值和沒有數(shù)值,但冒號必不可少。

一個數(shù)值的例子:[2:],意義是從下標(biāo)2到最后,步長為1。

沒有數(shù)值的例子:[:],意義是全部,步長為1。

3 步長的正負(fù)及與區(qū)間方向的配合

步長可以為正,也可以為負(fù)。為正表示從下標(biāo)從小到大,為負(fù)表示從大到小。前面兩個數(shù)值也表達(dá)了方向,這兩個必須一致,否則沒有結(jié)果。

例如,[1:3]是1,2,而[1:3:-1]則沒有結(jié)果。因為前面是從小到大,而步長表達(dá)是從大到小,寫成[3:1]就有結(jié)果,為3。

4 負(fù)下標(biāo)

-1,是最后一個元素(0是最前面一個)

負(fù)的下標(biāo),是從后面向前推進(jìn)。

例如:

name=’Swaroop’

則name[-1]為p,name[1:-1]為waroo

十一、排序

列表用sort()方法,沒有任何參數(shù)時是升序。

例如:

shoplist.sort()#升序

shoplist.sort(reverse=True)#降序

當(dāng)然可以用reverse=False表示升序,但沒有必要。

字符串和元組因為不可改變,不存在排序的問題。

集合沒有順序,字典用其它方法排序。

十二、連接運算

用字符串的join()方法

以下,定義字符串delimiter='_*_'

1 列表

例:

mylist=['Brazil','Russia','India','China']

print(delimiter.join(mylist))

結(jié)果:

Brazil_*_Russia_*_India_*_China

2 元組

例:

zoo=('python','elephant','penguin')

print(delimiter.join(zoo))

結(jié)果:

python_*_elephant_*_penguin

3 字符串

例:

name='swaroop'

print(delimiter.join(name))

結(jié)果:

s_*_w_*_a_*_r_*_o_*_o_*_p

4 字典

把鍵值連接起來,跟值無關(guān)。

例:

ab={

'Swaroop':'swaroop@swaroopch.com',

'Larry':'larry@wall.org',

'Matsumoto':'matz@ruby-lang.org',

'Spammer':'spammer@hotmail.com'

}

print(delimiter.join(ab))

結(jié)果:

Swaroop_*_Larry_*_Matsumoto_*_Spammer

5 集合

例:

bri = set(['brazil', 'russia', 'india'])

print(delimiter.join(bri))

結(jié)果:

india_*_brazil_*_russia

十三、其它

1 元組在定義時,如果只有一個元素,由其后要用逗號

例如:singleton = 2,? 或:singleton=(2,)

2 元組在定義時,可以用其它元組作元素

例如:

zoo=('python','elephant','penguin')

New_zoo='monkey','canmel',zoo

3 集合有判別超集的方法

例:print('bri是否為bric的超集:',bri.issuperset(bric))

4 集合的與運算

例:print('bri與bric重合的元素為:',bri & bric)

這個運算可以用intersection()方法代替:bri.intersection(bric)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容