溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python集合與字典數(shù)據(jù)類型實(shí)例分析

發(fā)布時(shí)間:2022-03-08 09:05:30 來源:億速云 閱讀:116 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“Python集合與字典數(shù)據(jù)類型實(shí)例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python集合與字典數(shù)據(jù)類型實(shí)例分析”吧!

    前言

    集合數(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))

    感謝各位的閱讀,以上就是“Python集合與字典數(shù)據(jù)類型實(shí)例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Python集合與字典數(shù)據(jù)類型實(shí)例分析這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI