文章目錄
- 元組、清單、字典、集合
-
- 1 清單
-
- 1.1 清單的建立
- 1.2 清單的處理
-
-
- 1.2.1 清單分割
- 1.2.2 提取元素
- 1.2.3 修改元素
-
- 1.3 清單的概念延伸
- 1.4 相關的清單處理函數
- 1.5 使用del删除指定位置的元素
- 1.6 使用join()将清單轉換為字元串
- 1.7 使用in判斷值是否存在于清單
- 1.8 使用=指派,使用copy()複制
- 2 元組
-
- 2.1 元組和清單各組特點
- 2.2 元組的建立
- 3 字典
-
- 3.1 字典的建立
-
- 3.1.1 使用{}建立字典
- 3.1.2 使用dict()轉換為字典
- 3.2 字典的處理
-
- 3.2.1 使用方括号[]添加或者修改元素
- 3.2.2 一些常用的字典處理函數
- 3.2.3 特别的處理方法
- 4 集合
-
- 4.1 集合的建立
-
- 4.1.1 使用set()函數建立集合
- 4.1.2 使用set()将其他類型轉換為集合
- 4.2 集合的處理
-
- 4.2.1 使用in判斷測試值是否存在
- 4.2.2 集合相關處理函數
- 總結
元組、清單、字典、集合
- 元組和清單是Python語言中非常重要的一部分内容,它們是Python中除了字元串以外的另兩種序列結構,幾乎在任何地方都少不了它們的使用。而字典是非常具有Python語言特色的一種類型,它與清單類似,但是其中元素的順序變的無關緊要。
1 清單
1.1 清單的建立
- 清單可以由[]或者list()建立,它可以由零個或者多個元素組成,元素之間用逗号隔開,整個清單要被方括号所包裹:
#建立空清單
>>> empty_list = [] # Method one
>>> empty_list = list() # Method two
#建立非空清單
>>> friends = ['You','They','Me']
- 同時,除了我們自己建立清單之外,我們還可以用list()将其它形式的資料類型轉換成清單類型:
# 将字元串轉換成清單:
>>> list('goldsunC')
['g', 'o', 'l', 'd', 's', 'u', 'n', 'C']
# 将元組轉換成清單:
>>> tuple = ('You','They','Me')
>>> list(tuple)
['You','They','Me']
1.2 清單的處理
1.2.1 清單分割
- 在Python學習筆記(二)中我寫了關于字元串的一些相關處理,其中有一個split()函數可以将字元串進行切割,相似的,這個函數也可以對清單進行切割:
>>> Mybirthday = '11/03/2000'
>>> Mybirthday.split('/')
['11','03'.'2000']
#Tip:一定要注意空格也是字元
1.2.2 提取元素
- 和字元串類似的,通過偏移位從清單中提取對應位置的元素:
>>> Myname = ['Chang','kang','ning']
>>> Myname[0]
'Chang'
>>> Myname[1]
'kang'
>>> Myname[-1]
'ning'
>>> Myname[-2]
'kang'
引用的偏移位對于待通路清單必須有效——該位置的元素在通路前已經正确指派,當指定的偏移位小于起始位置或者大于末尾位置時,會産生異常。
- 同時,也可以指定範圍并使用切片提取元素:
>>> Myname = ['Chang','kang','ning']
>>> Myname[0:2]
['Chang','kang']
# 其提取方式與字元串相比是類似的,詳細可參考上一章字元串的處理。
1.2.3 修改元素
- 我們不但可以通過偏移位通路某元素,還可以通過指派對它進行修改:
>>> emotion =['I','hate','you']
>>> emotion[1]='love' #同樣,偏移位的引用也必須時合法的
>>> emotion
['I','love','you']
- 使用此種方式無法修改清單内字元串中的指定字元,因為字元串本身是不可變的。而清單是可變的,是以你可以修改清單中的元素個數,以及元素的值。
1.3 清單的概念延伸
- 清單可以包含各種類型的元素,也包括其它的清單,同時也可以對一個有内層清單,并可以在清單内有對象時可以無限層引用,如下例:
#建立清單
>>> Myname = ['Chang','kang','ning']
>>> emotion = ['I','love','you']
>>> friends = ['You','They','Me']
>>> whole = [Myname,emotion,friends,'friendship']
>>> whole
[['Chang', 'kang', 'ning'], ['I', 'love', 'you'], ['You', 'They', 'Me'], 'friendship']
>>> whole[0]
['chang','kang','ning'] #這說明第一個元素還是一個清單,其實它就是Myname
>>> whole[0][0]
'Chang'
>>> whole[1][1]
'love'
>>> whole[1][1][1]
'o'
#這說明第一個[]指向whole的外層清單,而第二個[]指向whole的二層清單,第三個[]指向字元串。
1.4 相關的清單處理函數
函數名稱 | 作用 |
---|---|
append(element) | 将element添加至清單尾部(其可以是任何元素) |
extend(list) or += | 将list合并至原清單(注意與append區分) |
insert(offset,element) | 在offset處插入element(偏移位可以溢出) |
remove(element) | 删除原清單中的所有element |
pop(offset)(none==-1) | 擷取并删除offset處的元素 |
index(element) | 查詢element在清單中的偏移位 |
count(element) | 記錄element在清單中出現的總次數 |
sort() | 對清單進行排序同時改變原清單内容(數字升序或者字母升序),降序則在()中寫入reverse=Ture |
sorted() | 傳回排好序的清單副本,原清單内容不變 |
len(list) | 擷取list的長度 |
- 上邊是我整理的一些對清單進行處理的函數,其實還有幾個常用函數,因為其引用方式和上邊那些稍有不同,因為我單獨拿出并舉例。
1.5 使用del删除指定位置的元素
#建立清單
>>> friends =['You','They','Me']
>>> del friends[1]
>>> friends
['You','Me']
- 當清單中的一個元素被删除後,位于它後面的元素會自動往前移動填補空出的位置,且清單長度減1。
1.6 使用join()将清單轉換為字元串
#建立一個清單
>>> emotion =['I','love','you']
>>> result =' '.join(emotion)
>>> result
'I love you'
1.7 使用in判斷值是否存在于清單
#建立一個清單
>>> emotion =['I','love','you']
>>> 'love' in emotion
True
>>> 'hate' in emotion
False
#一個清單中可能存在多個相同的值,但隻要至少出現一次,in就會傳回 True
1.8 使用=指派,使用copy()複制
- 在這裡我覺得有必要解釋一下,在Python語言中,所有資料都是以對象的形式存在的,Python中的變量僅僅是一個名字,指派操作并不會實際複制值,它隻是為資料對象取了一個名字而已,名字是對對象的引用而不是對象本身。
- 下面舉個例子更好了解:
>>> a =[1,2,3,4,5]
>>> b =a
>>> b
[1,2,3,4,5]
>>> b[0]=0
>>> b
[0,2,3,4,5]
>>> a
[0,2,3,4,5]
- 如上例所示,a對b的指派僅僅是值從新在a所指對象的身上貼上了b的标簽,指派後a和b實際指向的是一個對象,是以無論是通過a還是通過b來修改其所指對象的内容,其結果都會作用于雙方。
如果想将一個清單的值複制到另一個新的清單中,可以采用以下三種方法:
- 清單copy()函數
- list()轉換函數
- 清單分片[:]
>>> a =[1,2,3,4,5]
>>> b =a.copy()
>>> c =list(a)
>>> d =a[:]
>>> a,b,c,d
([1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5])
使用這三種方法産生的b、c、d都是a的複制,它們是自身帶有值得新對象,與原始的a所指向的對象沒有任何關聯,此時改變任何一個對象的值都不影響其它對象。
2 元組
- 其實元組和清單是非常相像的一種資料類型,其最大的不同便是:元組是不可變的。這意味着元組一旦被定義,将無法再進行增加、删除或者修改元素等操作。相對來說,元組就像一個常量清單。因為元組與清單非常相似,接下來隻介紹一下元組的建立以及和清單對比的一些特點。
2.1 元組和清單各組特點
- 在許多地方都可以用元組代替清單,但元組的方法函數比清單要少很多:比如沒有append()、insert()等函數,因為建立了元組之後便無法修改了,是以沒有這些函數。那既然清單更加靈活,為什麼不在所有地方都應用清單呢?有以下幾點原因:
1.元組占用的空間較小
2.你不會意外修改元組的值以便防止程式發生雪崩式的漏洞
3.可以将元組作為字典的鍵
4.命名元組可以作為對象的替代
5.函數的參數是以元組的形式傳遞的
2.2 元組的建立
建立一個空元組用():
>>> empty_tuple =()
>>> empty_tuple
()
建立一個或者多個元素的元組時,每一個元素後面都要跟着一個逗号,即使隻包含一個元素也不能省略,當建立的元組包含的元素大于1時,最後一個元素後面的逗号可以省略:
>>> Myname ='ChangKangning',
>>> Myname
('ChangKangning',)
>>> Myname ='Chang','kang','ning'
>>> Myname
('Chang','kang','ning')
在Python的解釋器中輸出元組時總會自動添加一對圓括号,而我們并不需要這樣做-因為定義元組真正靠的是每個元素的字尾-“逗号”,不過你願意加一對圓括号也可以,這樣也會使得程式更加的清晰。
- 可以一口氣将元組指派給多個變量:
>>> Myname ='Chang','kang','ning'
>>> a,b,c =Myname
>>> a
'Chang'
>>> b
'kang'
>>> c
'ning'
#這個過程也被稱作“元組解包”
- 同時,利用tuple()函數也可以将其他類型的資料轉換成元組:
>>> Myname =['Chang','kang','ning']
>>> tuple(Myname)
('Chang','kang','ning')
3 字典
- 字典與清單類似,但是其中的元素順序變的無關緊要,因為字典并不是靠偏移位來通路的,每個元素不必被編相應的順序序号。取而代之,每個元素擁有與之對應的互不相同的
,需要通過鍵來通路元素,鍵通常是字元串,但它還可以是Python中其他任意的鍵(key)
類型:布爾型、浮點型、元組、字元串,以及其他一些相關類型。而字典本身是可變的,是以你可以增加、删除或修改其中的不可變
。鍵值對
3.1 字典的建立
3.1.1 使用{}建立字典
- 使用大括号{}将一系列以逗号隔開的
包裹起來即可進行字典的建立:鍵值對(key:value)
>>> empty_dict ={}
>>> empty_dict
{}
>>> a_dict ={'Myname':'ChangKangning',
'Yourname':'XXX'}
>>> a_dict
{'Myname': 'ChangKangning', 'Yourname': 'XXX'}
- Python允許在清單、元組、或者字典的最後一個元素後面添加逗号,這不會産生任何問題。此外,在括号之間輸入鍵值對來建立字典時并不強制要求縮進。
3.1.2 使用dict()轉換為字典
- 可以對任何包含雙值子序列的序列使用dict()将其轉化為字典:
#包含雙值元組的清單
>>> example =[('C','Chang'),('K','Kang'),('N','Ning')]
>>> dict(example)
{'C': 'Chang', 'K': 'Kang', 'N': 'Ning'}
#另外其它包含雙值清單的元組、雙字元的字元串、雙字元串組成的元組等都可以
# 轉化為字典,在此不一一舉例。
3.2 字典的處理
3.2.1 使用方括号[]添加或者修改元素
- 我們已經知道字典是由一對對的
組成,而向字典中添加元素非常簡單,隻需要指定該元素的鍵并賦予相應的值即可。如果該鍵已經有值,其将被新值取代,如果沒有此鍵,此鍵值對
将被加入字典。鍵值對
>>> name_dict ={'C':'Chang','K':'Kang'}
>>> name_dict
{'C':'Chang','K':'Kang'}
>>> name_dict['N']='Ning'
>>> name_dict
{'C': 'Chang', 'K': 'Kang', 'N': 'Ning'}
- 因為我們引用的是字典中
的鍵,是以我們需要知道,每個字典中包含的鍵必須保證互不相同。鍵值對
3.2.2 一些常用的字典處理函數
函數名稱 | 作用 |
---|---|
update(other_dict) | 将other_dict中的鍵值對複制到原字典 |
del dict[‘key’] | 删除dict中key的元素(類似清單中的del) |
clear() | 将字典中的所有元素删除 |
’key‘ in dict | 判斷key是否在字典中 |
keys() | 擷取字典中的所有 |
values() | 擷取字典中的所有 |
items() | 擷取字典中的所有 |
3.2.3 特别的處理方法
- 與清單類似,同樣的使用方括号[]來擷取元素。
- 在對字典的操作中,隻需要指定
和字典名字
即可得到對應的鍵
:值
>>> name_dict ={'C':'Chang','K':'Kang','N':'Ning'}
>>> name_dict['C']
'Chang'
- 注意,如果在操作的字典中不包含指定的鍵,則系統會報錯而并不是傳回空,而有兩種方法可以避免這種情況發生:
-
- 用
表中的3.2.2
判斷此鍵是否存在。in
- 用
-
- 使用字典函數get(),你在使用時需要指定字典名、鍵、以及一個可選值。如果鍵存在,會傳回其對應值。如果不存在,則傳回這個可選值。
如下:
>>> name_dict ={'C':'Chang','K':'Kang'}
>>> name_dict.get('K','none')
'Kang'
>>> name_dict.get('N','none')
'none'
- 與清單一樣,對字典内容資訊的修改會反映到所有與之相關聯的變量名上,若想避免此種情況,則還是需要用copy()函數将字典複制到一個新字典中。
4 集合
- 對于元組和清單我們知道,元組就像是不會改變的清單,其性質非常相似,而對于字典與集合來講,**集合就像設其了值,
- 僅剩下鍵的字典一樣**。集合裡邊的元素不允許重複,同時也沒有順序。如果你僅僅向知道某一個元素是否存在而不關心其他的東西,使用集合是一個非常好的選擇。
4.1 集合的建立
4.1.1 使用set()函數建立集合
- 我們可以使用set()函數建立一個集合,或者用大括号将一系列以逗号隔開的值包裹起來建立集合。如下所示:
>>> empty_set =set()
>>> empty_set
set()
>>> a_set ={1,2,3,4,5}
>>> a_set
{1,2,3,4,5} #雖然此時傳回的值看似有序,但一定注意集合是無序的!!!
- 注意,空集合的建立并不是之間使用一個大括号就行了,大括号是用來建立字典的,為了避免與空字典的重複,解釋器輸出的空集合是set(),這樣規定沒有什麼特殊原因,僅僅是因為字典的出現比較早吧。
4.1.2 使用set()将其他類型轉換為集合
這裡沒什麼好解釋的,直接上例子:
>>> set('ning')
{'i','n','g'}
#如上所示,兩個n變成了一個
#将清單轉換為集合
>>> set(['Chang','kang','ning'])
{'ning', 'Chang', 'kang'}
#将元組轉換為集合
>>> set(('Chang','kang','ning'))
{'ning', 'Chang', 'kang'}
#當字典作為參數傳入set()函數時,隻有鍵會被使用:
>>> set({'C':'Chang','K':'Kang','N':'Ning'})
{'C','K','N'}
4.2 集合的處理
- 前邊已經說過,集合裡面的元素是無序的、唯一的,是以我們最常用的功能是判斷元素是否存在于目标集合。
4.2.1 使用in判斷測試值是否存在
#我們先建立一個字典,字典裡邊的值為集合
>>> a_dict ={
'C':{'C','h','a','n','g'},
'K':{'K','a','n','g'},
'N':{'N','i','n','g'}
}
>>> for i,j in a_dict.items():
if 'a' in j:
print(i)
'C'
'K'
4.2.2 集合相關處理函數
函數名稱 | 作用 |
---|---|
intersection(set) | 擷取原集合與set的交集 |
& | |
union(set) | 擷取原集合與set的并集 |
| | |
difference(set) | 擷取原集合與set的差集 |
- | |
symmetric_difference(set) | 擷取原集合與set的 集(僅在兩個集合中出現一次) |
^ | |
issubset(set) | 判斷原集合是否為set的子集 |
<= | |
< | 判斷真子集 |
issuperset(set) | 判斷原集合是否為set的超集 |
>= | |
> | 判斷真超集 |
總結
- 到此為止,關于元組、清單、字典、集合的常用相關基礎知識已經全部敲出來了,說實話這些東西看的時候可能一個小時就能看完,但是要敲出來得需要一天,不過在敲的過程中确實加強了很多,畢竟那些舉得例子大多需要在解釋器裡運作一下,有時候出個錯也能更掌握相關知識點,這篇文章對我自己肯定有幫助,希望也能幫到看到的你。