天天看點

元組、清單、字典、集合詳細介紹說明元組、清單、字典、集合總結

文章目錄

  • 元組、清單、字典、集合
    • 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 字典

  • 字典與清單類似,但是其中的元素順序變的無關緊要,因為字典并不是靠偏移位來通路的,每個元素不必被編相應的順序序号。取而代之,每個元素擁有與之對應的互不相同的

    鍵(key)

    ,需要通過鍵來通路元素,鍵通常是字元串,但它還可以是Python中其他任意的

    不可變

    類型:布爾型、浮點型、元組、字元串,以及其他一些相關類型。而字典本身是可變的,是以你可以增加、删除或修改其中的

    鍵值對

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'
           
  • 注意,如果在操作的字典中不包含指定的鍵,則系統會報錯而并不是傳回空,而有兩種方法可以避免這種情況發生:
    1. 3.2.2

      表中的

      in

      判斷此鍵是否存在。
    1. 使用字典函數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的超集
>=

同上

> 判斷真超集

總結

  • 到此為止,關于元組、清單、字典、集合的常用相關基礎知識已經全部敲出來了,說實話這些東西看的時候可能一個小時就能看完,但是要敲出來得需要一天,不過在敲的過程中确實加強了很多,畢竟那些舉得例子大多需要在解釋器裡運作一下,有時候出個錯也能更掌握相關知識點,這篇文章對我自己肯定有幫助,希望也能幫到看到的你。