最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中集合(set)常見(jiàn)操作的完整教學(xué)

 更新時(shí)間:2026年06月01日 09:22:22   作者:py小王子  
通常我們對(duì)集合的定義是把一定范圍的、確定的、可以區(qū)別的事物當(dāng)作一個(gè)整體來(lái)看待,集合中的各個(gè)事物通常稱(chēng)為集合的元素,下面小編就和大家詳細(xì)總結(jié)一下Python中集合的常見(jiàn)操作吧

對(duì)于集合的學(xué)習(xí),我整理了網(wǎng)上的一些資料,希望可以幫助到各位?。?!

通常我們對(duì)集合的定義是“把一定范圍的、確定的、可以區(qū)別的事物當(dāng)作一個(gè)整體來(lái)看待”,集合中的各個(gè)事物通常稱(chēng)為集合的元素。集合應(yīng)該滿(mǎn)足以下特性:

  1. 無(wú)序性:一個(gè)集合中,每個(gè)元素的地位都是相同的,元素之間是無(wú)序的。
  2. 互異性:一個(gè)集合中,任何兩個(gè)元素都是不相同的,即元素在集合中只能出現(xiàn)一次。
  3. 確定性:給定一個(gè)集合和一個(gè)任意元素,該元素要么屬這個(gè)集合,要么不屬于這個(gè)集合,二者必居其一,不允許有模棱兩可的情況出現(xiàn)。

注意:集合的成員運(yùn)算在性能上要優(yōu)于列表的成員運(yùn)算,這是集合的底層存儲(chǔ)特性(哈希存儲(chǔ))決定的

創(chuàng)建集合

在Python中,創(chuàng)建集合可以使用{}字面量語(yǔ)法,{}中需要至少有一個(gè)元素,因?yàn)闆](méi)有元素的`{}`并不是空集合而是一個(gè)空字典。

使用內(nèi)置函數(shù)set來(lái)創(chuàng)建一個(gè)集合,準(zhǔn)確的說(shuō)set并不是一個(gè)函數(shù),而是創(chuàng)建集合對(duì)象的構(gòu)造器。

要?jiǎng)?chuàng)建空集合可以使用set(),也可以將其他序列轉(zhuǎn)換成集合

例如:set('hello')會(huì)得到一個(gè)包含了4個(gè)字符的集合(重復(fù)的l會(huì)被去掉)。

除了這兩種方式,我們還可以使用生成式語(yǔ)法來(lái)創(chuàng)建集合,就像我們之前用生成式創(chuàng)建列表那樣。要知道集合中有多少個(gè)元素,還是使用內(nèi)置函數(shù)len;使用for循環(huán)可以實(shí)現(xiàn)對(duì)集合元素的遍歷。

# 創(chuàng)建集合的字面量語(yǔ)法(重復(fù)元素不會(huì)出現(xiàn)在集合中)
set1 = {1, 2, 3, 3, 3, 2}
print(set1)         # {1, 2, 3}
print(len(set1))    # 3

# 創(chuàng)建集合的構(gòu)造器語(yǔ)法
set2 = set('hello')
print(set2)         # {'h', 'l', 'o', 'e'}

# 將列表轉(zhuǎn)換成集合(可以去掉列表中的重復(fù)元素)
set3 = set([1, 2, 3, 3, 2, 1])
print(set3)         # {1, 2, 3}

# 創(chuàng)建集合的生成式語(yǔ)法(將列表生成式的[]換成{})
set4 = {num for num in range(1, 20) if num % 3 == 0 or num % 5 == 0}
print(set4)         # {3, 5, 6, 9, 10, 12, 15, 18}

# 集合元素的循環(huán)遍歷
for elem in set4:
    print(elem)

需要提醒大家,集合中的元素必須是hashable類(lèi)型。所謂hashable類(lèi)型指的是能夠計(jì)算出哈希碼的數(shù)據(jù)類(lèi)型,可以暫時(shí)將哈希碼理解為和變量對(duì)應(yīng)的唯一的ID值。

通常不可變類(lèi)型都是hashable類(lèi)型,如整數(shù)、浮點(diǎn)、字符串、元組等,

而可變類(lèi)型都不是hashable類(lèi)型,因?yàn)榭勺冾?lèi)型無(wú)法確定唯一的ID值,所以也就不能放到集合中。集合本身也是可變類(lèi)型,所以集合不能夠作為集合中的元素,這一點(diǎn)在使用集合的時(shí)候一定要注意。

集合的運(yùn)算

Python為集合類(lèi)型提供了非常豐富的運(yùn)算符,主要包括:成員運(yùn)算、交集運(yùn)算、并集運(yùn)算、差集運(yùn)算、比較運(yùn)算(相等性、子集、超集)等。

成員運(yùn)算(in、not in)

set1 = {11, 12, 13, 14, 15}
print(10 in set1)        # False 
print(15 in set1)        # True
set2 = {'Python', 'Java', 'Go', 'Swift'}
print('Ruby' in set2)    # False
print('Java' in set2)    # True

交并差運(yùn)算(&、|、-、^)

set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {2, 4, 6, 8, 10}

# 交集
# 方法一: 使用 & 運(yùn)算符
print(set1 & set2)                # {2, 4, 6}
# 方法二: 使用intersection方法
print(set1.intersection(set2))    # {2, 4, 6}

# 并集
# 方法一: 使用 | 運(yùn)算符
print(set1 | set2)         # {1, 2, 3, 4, 5, 6, 7, 8, 10}
# 方法二: 使用union方法
print(set1.union(set2))    # {1, 2, 3, 4, 5, 6, 7, 8, 10}

# 差集
# 方法一: 使用 - 運(yùn)算符
print(set1 - set2)              # {1, 3, 5, 7}
# 方法二: 使用difference方法
print(set1.difference(set2))    # {1, 3, 5, 7}

# 對(duì)稱(chēng)差
# 方法一: 使用 ^ 運(yùn)算符
print(set1 ^ set2)                        # {1, 3, 5, 7, 8, 10}
# 方法二: 使用symmetric_difference方法
print(set1.symmetric_difference(set2))    # {1, 3, 5, 7, 8, 10}
# 方法三: 對(duì)稱(chēng)差相當(dāng)于兩個(gè)集合的并集減去交集
print((set1 | set2) - (set1 & set2))      # {1, 3, 5, 7, 8, 10}

集合的交集、并集、差集運(yùn)算還可以跟賦值運(yùn)算一起構(gòu)成復(fù)合賦值運(yùn)算

set1 = {1, 3, 5, 7}
set2 = {2, 4, 6}
# 將set1和set2求并集再賦值給set1
# 也可以通過(guò)set1.update(set2)來(lái)實(shí)現(xiàn)
set1 |= set2
print(set1)    # {1, 2, 3, 4, 5, 6, 7}
set3 = {3, 6, 9}
# 將set1和set3求交集再賦值給set1
# 也可以通過(guò)set1.intersection_update(set3)來(lái)實(shí)現(xiàn)
set1 &= set3
print(set1)    # {3, 6}

比較運(yùn)算(<、>)

Python為集合類(lèi)型提供了判斷子集和超集的運(yùn)算符,其實(shí)就是我們非常熟悉的<和>運(yùn)算符

set1 = {1, 3, 5}
set2 = {1, 2, 3, 4, 5}
set3 = set2
# <運(yùn)算符表示真子集,<=運(yùn)算符表示子集
print(set1 < set2, set1 <= set2)    # True True
print(set2 < set3, set2 <= set3)    # False True
# 通過(guò)issubset方法也能進(jìn)行子集判斷
print(set1.issubset(set2))      # True

# 反過(guò)來(lái)可以用issuperset或>運(yùn)算符進(jìn)行超集判斷
print(set2.issuperset(set1))    # True
print(set2 > set1)              # True

集合的方法

Python中的集合是可變類(lèi)型,我們可以通過(guò)集合類(lèi)型的方法為集合添加或刪除元素

# 創(chuàng)建一個(gè)空集合
set1 = set()

# 通過(guò)add方法添加元素
set1.add(33)
set1.add(55)
set1.update({1, 10, 100, 1000})
print(set1)    # {33, 1, 100, 55, 1000, 10}

# 通過(guò)discard方法刪除指定元素
set1.discard(100)
set1.discard(99)
print(set1)    # {1, 10, 33, 55, 1000}

# 通過(guò)remove方法刪除指定元素,建議先做成員運(yùn)算再刪除
# 否則元素如果不在集合中就會(huì)引發(fā)KeyError異常
if 10 in set1:
    set1.remove(10)
print(set1)    # {33, 1, 55, 1000}

# pop方法可以從集合中隨機(jī)刪除一個(gè)元素并返回該元素
print(set1.pop())

# clear方法可以清空整個(gè)集合
set1.clear()

print(set1)    # set()

如果要判斷兩個(gè)集合有沒(méi)有相同的元素可以使用isdisjoint方法,沒(méi)有相同元素返回True,否則返回False

set1 = {'Java', 'Python', 'Go', 'Kotlin'}
set2 = {'Kotlin', 'Swift', 'Java', 'Objective-C', 'Dart'}
set3 = {'HTML', 'CSS', 'JavaScript'}
print(set1.isdisjoint(set2))    # False
print(set1.isdisjoint(set3))    # True

不可變集合(frozenset)

Python中還有一種不可變類(lèi)型的集合,名字叫frozenset。

set跟frozenset的區(qū)別就如同list跟tuple的區(qū)別,frozenset由于是不可變類(lèi)型,能夠計(jì)算出哈希碼,因此它可以作為set中的元素。除了不能添加和刪除元素,frozenset在其他方面跟set基本是一樣的。

set1 = frozenset({1, 3, 5, 7})
set2 = frozenset(range(1, 6))
print(set1 & set2)    # frozenset({1, 3, 5})
print(set1 | set2)    # frozenset({1, 2, 3, 4, 5, 7})
print(set1 - set2)    # frozenset({7})
print(set1 < set2)    # False

總結(jié)

Python中的集合底層使用了哈希存儲(chǔ)的方式,通過(guò)本章學(xué)習(xí)大家需要知道:

集合是一種容器,元素必須是hashable類(lèi)型,

與列表不同的地方在于集合中的元素沒(méi)有序、不能用索引運(yùn)算、不能重復(fù)。

到此這篇關(guān)于Python中集合(set)常見(jiàn)操作的完整教學(xué)的文章就介紹到這了,更多相關(guān)Python集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm中Django ORM屬性提示缺失問(wèn)題的解決方法

    PyCharm中Django ORM屬性提示缺失問(wèn)題的解決方法

    PyCharm無(wú)法識(shí)別Django模型的objects屬性提示,可能因支持未啟用、類(lèi)型提示缺失或索引未更新,解決方法包括啟用Django支持、配置正確虛擬環(huán)境、添加類(lèi)型注解、重建索引及更新插件,下面小編通過(guò)代碼示例給大家詳細(xì)介紹一下,需要的朋友可以參考下
    2025-07-07
  • PySide6精簡(jiǎn)教程(附圖文!)

    PySide6精簡(jiǎn)教程(附圖文!)

    PySide6是Qt的Python封裝,是Qt for Python的組成之一,另一部分是Shiboken,下面這篇文章主要給大家介紹了關(guān)于PySide6精簡(jiǎn)教程的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 從PySpark中的字符串獲取列表方法講解

    從PySpark中的字符串獲取列表方法講解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于從PySpark中的字符串獲取列表方法講解及相關(guān)實(shí)例,有需要的朋友們跟著學(xué)習(xí)下。
    2021-12-12
  • pycharm 如何跳出服務(wù)器證書(shū)不受信任的提示

    pycharm 如何跳出服務(wù)器證書(shū)不受信任的提示

    這篇文章主要介紹了pycharm 跳出服務(wù)器證書(shū)不受信任的提示操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python算法練習(xí)之兔子產(chǎn)子(斐波那切數(shù)列)

    python算法練習(xí)之兔子產(chǎn)子(斐波那切數(shù)列)

    這篇文章主要給大家介紹python算法練習(xí)兔子產(chǎn)子,文章先進(jìn)行問(wèn)題描述及分析然后設(shè)計(jì)算法最后再得出完整程序,需要的朋友可以參考一下 文章得具體內(nèi)容
    2021-10-10
  • python3 打開(kāi)外部程序及關(guān)閉的示例

    python3 打開(kāi)外部程序及關(guān)閉的示例

    今天小編就為大家分享一篇python3 打開(kāi)外部程序及關(guān)閉的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • pycharm終端無(wú)法激活conda環(huán)境的解決辦法

    pycharm終端無(wú)法激活conda環(huán)境的解決辦法

    如果您在PyCharm終端中無(wú)法激活conda環(huán)境,可能是由于PyCharm沒(méi)有正確配置conda解釋器,這篇文章主要給大家介紹了關(guān)于pycharm終端無(wú)法激活conda環(huán)境的解決辦法,需要的朋友可以參考下
    2023-09-09
  • Python中合并列表(list)的六種方法小結(jié)

    Python中合并列表(list)的六種方法小結(jié)

    本文主要介紹了Python中合并列表(list)的六種方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Pytorch 的損失函數(shù)Loss function使用詳解

    Pytorch 的損失函數(shù)Loss function使用詳解

    今天小編就為大家分享一篇Pytorch 的損失函數(shù)Loss function使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python函數(shù)傳參意義示例詳解

    python函數(shù)傳參意義示例詳解

    這篇文章主要為大家介紹了關(guān)于python函數(shù)傳參的意義示例詳解,有需要的朋友可以借鑒參考下,希望可以加深各位同學(xué)對(duì)Python傳參的理解
    2021-10-10

最新評(píng)論

岳阳县| 滦平县| 上高县| 辉南县| 永安市| 大姚县| 亚东县| 精河县| 邯郸县| 东山县| 商城县| 江安县| 双流县| 双桥区| 兴山县| 蛟河市| 融水| 文山县| 乌什县| 遵义县| 深圳市| 钟祥市| 绥芬河市| 岳西县| 河北区| 绥宁县| 兖州市| 星子县| 朝阳区| 丰城市| 台湾省| 陇川县| 鄂托克旗| 湄潭县| 临汾市| 罗甸县| 漠河县| 宜宾市| 潞城市| 阿鲁科尔沁旗| 晋中市|