Python?一篇文章看懂Python集合與字典數(shù)據(jù)類型
前言
集合數(shù)據(jù)類型是沒有順序的簡(jiǎn)單對(duì)象的聚集,并且集合中的元素不會(huì)重復(fù)。Python中的集合包括可變集合對(duì)象(set)與不可變集合對(duì)象(frozenset)。字典是具有鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。每個(gè)鍵不能重復(fù),并且可以根據(jù)字典的鍵查詢到他的值。這兩位好兄弟外觀組成都是使用{}進(jìn)行包裹。并且底層原理有一定的相通性。他們的底層實(shí)現(xiàn)一般都是用了哈希表。
一、集合類型??
1.定義
- 集合數(shù)據(jù)類型分為可變集(set)與不可變集(frozenset)兩種。
- 集合中的元素不可以重復(fù),并且無序。(因?yàn)閷?duì)象存在集合內(nèi)是以哈希對(duì)象的形式存儲(chǔ)的)
- 集合內(nèi)放置的應(yīng)該是不可變對(duì)象(數(shù)值型數(shù)據(jù)類型、字符串元組、不可變集合)
- 空集合的的表示方法是set()。{}是空字典的表示方式。
- 可以使用in /not in判斷元素是否在集合內(nèi)。
2.集合使用方式
集合的使用方式與中學(xué)時(shí)代學(xué)到的集合有些相似。也就是說數(shù)學(xué)上的集合交、并、補(bǔ)、差運(yùn)算可以運(yùn)用到Python集合上。表示方式如下
假設(shè)集合有A={1,2,3}、B={2,3,4}、C={3,4,5}、D={1,2,3,4}四個(gè) 交:
A|B|C={3}
并:
A&B={1,2,3,4}
補(bǔ):
A^D={4}
差
A-B={1}
可以使用這些方法進(jìn)行是否有相同元素,是否具有包含關(guān)系的判斷
3.集合推導(dǎo)式
前面講列表的時(shí)候講到了列表推導(dǎo)式,可以直接生成一個(gè)自己的想要的列表。今天咱就講一下集合列表推導(dǎo)式
推導(dǎo)式語法:
{變量通式 for i in 序列 [判斷條件]}
例如下式求偶數(shù)的平方
print({i*i for i in range(10) if i%2==0})
4.可變集合
可變集合用set進(jìn)行創(chuàng)建(可變集合底層依舊是哈希表,所以只能存儲(chǔ)不可變對(duì)象) print(set([1,2,3]))
創(chuàng)建的對(duì)象有一系列的方法。add(x)、remove(x)、discard(x)、pop()、clear() 上面幾個(gè)函數(shù)分別對(duì)應(yīng)的增加元素、移除元素(不存在拋異常)、移除元素、隨機(jī)彈出元素、清空集合
實(shí)際操作代碼:
''' 集合set,底層依舊是哈希表,無序不可重復(fù) ''' # 操作(增刪改,創(chuàng)建集合) # 聲明方式一 s1={123,'hello',666,888,'Tom'} # 聲明方式二 s2=set({123,'hello',666,888,'Tom'}) # 集合生成式 s3={i*i for i in range(10)} print(s1,id(s1),type(s1)) print(s2,id(s2),type(s2)) print(s3) # 判斷集合是否相同(比較的是內(nèi)部含有的元素) print(s1==s2) print(s1==s3) # 增 # 適合一個(gè)一個(gè)的增加 s1.add(123123) print(s1) # 適合增加多個(gè)元素 # 將字符串直接加進(jìn)去 s1.update(['world','milk']) s1.update(('world1','milk1')) # 將字符串拆開加進(jìn)去 s1.update('world3','milk3') print(s1) # 刪 # 刪除傳進(jìn)去的元素,沒有的話拋出異常 # s1.remove(777) # 刪除元素,沒有的話不拋異常None s1.discard(888) print(s1.discard(777)) print(s1) # 隨機(jī)刪除一個(gè)元素(不能進(jìn)行參數(shù)的傳遞) s1.pop() # 清除所有元素 s1.clear() # 空集合 print(s1) '''集合之間的關(guān)系,交,并,差集,并集差集子集,超集,元素是否相同''' s4=set(s2) s5=set(s2) s4.add('joso') s5.add('pink') # s2是否是s4的子集 print(s2.issubset(s4)) # s2是否是s4的超集 print(s2.issuperset(s4)) # 兩集和元素是否都不相同 print(s5.isdisjoint(s4)) # 交集 print('--------------------') print(s4.intersection(s2)) print(s4 & s2) # 并集 print('--------------------') print(s4.union(s5)) print(s4 | s5) # 差集 print(s4.difference(s5)) print(s4-s5) # 對(duì)稱差集 print(s4.symmetric_difference(s5)) print(s4 ^ s5)
二、字典類型??
1.定義
字典是鍵和值的映射關(guān)系,所以有時(shí)也稱為映射數(shù)據(jù)類型。字典的鍵是哈希數(shù)據(jù)類型(不可變),值是任意類型,并且在一個(gè)字典內(nèi)每種鍵只能有一個(gè),值可以重復(fù)可以任意取??梢酝ㄟ^鍵獲取到相應(yīng)的值。
鍵值對(duì)的一般形式就是 鍵:值
所以字典的一般形式就是{鍵1:值,鍵2:值,鍵3:值…}
創(chuàng)建字典可以直接使用字面量{鍵1:值,鍵2:值,鍵3:值…},也可以使用dict進(jìn)行創(chuàng)建。
dict支持字典轉(zhuǎn)字典、支持序列轉(zhuǎn)字典。
2.字典的使用方式
字典使用的時(shí)候可以單獨(dú)的獲取鍵、值與【鍵、值】列表
方式是:
- dic.keys() #獲取鍵列表
- d.values() #獲取值列表
- d.items() #獲取元組形式的鍵值列表
字典可以使用in / not in判斷字典內(nèi)是否含有某鍵。
字典對(duì)象有一系列方法:
- clear() #清空元素
- copy() #復(fù)制字典
- get(k) #根據(jù)鍵獲取值
- pop(k) #如果鍵存在則刪除并返回值,不存在拋出異常
- pop(k,v)#如果鍵存在則刪除并返回值,不存在返回V
- setdefault(k,v) #如果k鍵存在則返回其值,如果不存在添加k鍵并賦值None
- update() #傳入字典或鍵值對(duì)更新操作
3.字典推導(dǎo)式
字典推導(dǎo)式與列表推導(dǎo)式、集合推導(dǎo)式使用方法類似,只不過他有兩個(gè)值 {k:v for k in …for v in …}
{x:x*x for x in range(10) if x%2==0} {x:y for x in range(10) for y in range(10,20)}
4.代碼練習(xí)
''' 對(duì)比學(xué)習(xí),字典與列表有什么不同呢? 列表是方括號(hào) 列表內(nèi)的數(shù)據(jù)是單個(gè)存在的 有序 可以重復(fù)出現(xiàn) 字典是花括號(hào) 字典內(nèi)的數(shù)據(jù)是成對(duì)存在的 無序 鍵值對(duì)不可亂寫,并且鍵重復(fù)的話,值會(huì)進(jìn)行覆蓋 字典內(nèi)的數(shù)據(jù)沒有順序,底層的原理是哈希表,用哈希表實(shí)現(xiàn)鍵值對(duì)應(yīng) ''' # 字典的創(chuàng)建方式一 # 字典內(nèi)的同一個(gè)鍵對(duì)應(yīng)不同值時(shí),會(huì)將前面的值進(jìn)行覆蓋 s={'name':'張三','paassward':'888888','name':'瑪卡巴卡'} # 字典的創(chuàng)建方式二 ss=dict(user='pig',passward='123123') # 字典的創(chuàng)建方式三(列表進(jìn)行創(chuàng)建) t1=['username','passward'] t2=['Tom','1980'] # upper,lower是對(duì)字符串進(jìn)行全部大寫,全部小寫的函數(shù) sss={t1.upper():t2.lower() for t1,t2 in zip(t1,t2)} # 打印顯示字典類型 print(s,type(s)) print(ss,type(s)) print(sss,type(s)) # 字典元素的增加/修改 # 由于每個(gè)鍵在字典內(nèi)只能有一個(gè),所以當(dāng)一個(gè)鍵對(duì)應(yīng)新的值時(shí),會(huì)產(chǎn)生覆蓋 # 也就是對(duì)原來鍵對(duì)應(yīng)的值進(jìn)行了修改 s['name']='李四' print(s) # 或者用一個(gè)原來沒有的鍵,產(chǎn)生新增的效果 s['age']='20' print(s) # 獲取字典值 # 獲取所有鍵 keyS=s.keys() print(keyS) # 獲取所有值 valueS=s.values() print(keyS,valueS) # 獲取所有鍵值對(duì) iteM=s.items() print(iteM) # 給鍵獲取值 字典名[key]-----找不到會(huì)報(bào)錯(cuò) print(s['paassward']) # 給鍵獲取值 字典名.get()----找不到可以指定打印什么 print(s.get('paassward')) print(s.get('qwe','沒找到')) # 判斷是否在字典內(nèi)(鍵值都可以判斷) print('paassward' in s,'888888' in s) # 字典元素的清除 del s['name'] print(s) # 清空字典 s.clear() print(s) # 字典的遍歷 # temp作為字典內(nèi)的鍵,然后在字典內(nèi)尋找值 for temp in ss: print(temp,ss[temp],ss.get(temp))
總結(jié)
集合與字典到此就結(jié)束啦,這兩種數(shù)據(jù)類型比較簡(jiǎn)單、但是內(nèi)置的方法比較多。重點(diǎn)掌握住他們的特點(diǎn):可變不可變之類的。相信大家可以玩轉(zhuǎn)這兩種數(shù)據(jù)類型。
到此這篇關(guān)于Python?一篇文章看懂Python集合與字典數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)Python 集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python字符編碼轉(zhuǎn)碼之GBK,UTF8互轉(zhuǎn)
說到python的編碼,一句話總結(jié),說多了都是淚啊,這個(gè)在以后的python的開發(fā)中絕對(duì)是一件令人頭疼的事情。所以有必要輸入理解2020-02-02詳解如何修改jupyter notebook的默認(rèn)目錄和默認(rèn)瀏覽器
這篇文章主要介紹了詳解如何修改jupyter notebook的默認(rèn)目錄和默認(rèn)瀏覽器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01在Python中居然可以定義兩個(gè)同名通參數(shù)的函數(shù)
今天小編就為大家分享一篇在Python中居然可以定義兩個(gè)同名通參數(shù)的函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01解決Python中的ModuleNotFoundError:?No?module?named?'pad
你是否在嘗試導(dǎo)入`paddle`模塊時(shí)遇到了"ModuleNotFoundError:?No?module?named?'paddle'"這個(gè)錯(cuò)誤?別擔(dān)心,我們的指南會(huì)告訴你如何解決,這就像找到丟失的鑰匙一樣簡(jiǎn)單,讓我們一起來看看如何解決這個(gè)問題吧!2024-03-03Python學(xué)習(xí)之字典的常用方法總結(jié)
這篇文章主要為大家介紹了Python中字典的幾個(gè)常用方法總結(jié),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python字典有一定幫助,需要的可以參考一下2022-03-03Python中的def __init__( )函數(shù)
這篇文章主要介紹了Python中的def __init__( )函數(shù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09圖文詳解梯度下降算法的原理及Python實(shí)現(xiàn)
梯度下降是迭代法的一種,可以用于求解最小二乘問題(線性和非線性都可以)。本文將通過圖文詳解梯度下降算法的原理及實(shí)現(xiàn),需要的可以參考一下2022-08-08Pytorch實(shí)現(xiàn)ResNet網(wǎng)絡(luò)之Residual Block殘差塊
這篇文章主要為大家介紹了Pytorch實(shí)現(xiàn)ResNet網(wǎng)絡(luò)之Residual Block殘差塊實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Python pip install如何修改默認(rèn)下載路徑
這篇文章主要介紹了Python pip install如何修改默認(rèn)下載路徑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04python實(shí)現(xiàn)簡(jiǎn)單購(gòu)物商城
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單購(gòu)物商城的相關(guān)資料,具有實(shí)用性和一定的參考價(jià)值,感興趣的朋友可以參考一下2016-05-05