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)