天天看點

python幾種資料結構_python的五種資料結構

python幾種資料結構_python的五種資料結構

Python有四種資料結構,這裡再加上字元串,是以共有五種:

字元串(string)、清單(list)、元組(tuple)、字典(dictionary)和集合(set)。

加上字元串是因為它與其它資料結構有些相似的地方,放進來一起講比較友善。

一、定義方法

字元串用引号

例如:name='Swaroop'

清單用方括号

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

元組用圓括号

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

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

Number=1,2,3,4,5

特别地,如果元組中隻有一個元素,它後面需要一個逗号

例如:aNumber=1,

當用print輸出時,元組有圓括号,是以,用圓括号包覆是正常狀态。

字典用花括号

例如:ab={

'Swaroop':'[email protected]',

'Larry':'[email protected]',

'Matsumoto':'[email protected]',

'Spammer':'[email protected]'

}

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

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

集合用set()方法

這是與前面的資料結構都不一樣的地方。

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

注意參數的形式跟清單一樣。

二、分類

1 可變與不可變

清單、字典和集合是可變的。它們的元素可以修改,可以添加、删除元素。

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

2 序列與非序列

清單、元組和字元串是序列。

序列同時具有三個特點:

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

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

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

字典和集合不是序列。

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

三、通路元素的方法

序列可以用數字下标通路元素,非序列不可以用這種方法。

字典,用鍵值通路值,例如: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']='[email protected]'#添加成員

3 集合,用add()方法

例:bric.add('china')

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

1 字元串顯示内容,沒有引号

2 清單要顯示方括号

3 元組要顯示圓括号

4 字典要顯示花括号

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

七、賦予變量和産生副本

1 字元串名如果賦予另一個變量,會産生一個副本。沒有兩個變量指向同一個字元串的情況。

2 元組名賦予另一個變量,會産生一個副本。沒有兩個變量指向同一個元組的情況。

3 清單名賦予一個變量,則它們指向同一個清單,并沒有産生新的清單。也就是說,這個清單有了兩個名字。

要産生副本,使用切片操作。例如:

s=shoplist[:]

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

a=ab.copy()

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

b=bri.copy()

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

九、周遊

五種資料結構都可以使用周遊,方法類似。

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

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)

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

參數用方括号表達一個區間。

1 完整參數

方括号裡面有三個數值,用冒号隔開。

第一、二個是下标,給出一個左閉右開的區間,即從第一個下标開始,到第二個下标的前一個終止。

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

第三個數值的意義是步長,省略了就是1。例如[1:3]相當于[1:3:1]。

2 省略

方括号裡面還可以省略到一個數值和沒有數值,但冒号必不可少。

一個數值的例子:[2:],意義是從下标2到最後,步長為1。

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

3 步長的正負及與區間方向的配合

步長可以為正,也可以為負。為正表示從下标從小到大,為負表示從大到小。前面兩個數值也表達了方向,這兩個必須一緻,否則沒有結果。

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

4 負下标

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

負的下标,是從後面向前推進。

例如:

name=’Swaroop’

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

十一、排序

清單用sort()方法,沒有任何參數時是升序。

例如:

shoplist.sort()#升序

shoplist.sort(reverse=True)#降序

當然可以用reverse=False表示升序,但沒有必要。

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

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

十二、連接配接運算

用字元串的join()方法

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

1 清單

例:

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

print(delimiter.join(mylist))

結果:

Brazil_*_Russia_*_India_*_China

2 元組

例:

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

print(delimiter.join(zoo))

結果:

python_*_elephant_*_penguin

3 字元串

例:

name='swaroop'

print(delimiter.join(name))

結果:

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

4 字典

把鍵值連接配接起來,跟值無關。

例:

ab={

'Swaroop':'[email protected]',

'Larry':'[email protected]',

'Matsumoto':'[email protected]',

'Spammer':'[email protected]'

}

print(delimiter.join(ab))

結果:

Swaroop_*_Larry_*_Matsumoto_*_Spammer

5 集合

例:

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

print(delimiter.join(bri))

結果:

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)