Python的集合類型之set和frozenset詳解
集合類型— set, frozenset
set 對象是由具有唯一性的hashable 對象所組成的無序多項(xiàng)集。常見的用途包括成員檢測、從序列中去除重復(fù)項(xiàng)以及數(shù)學(xué)中的集合類計(jì)算,例如交集、并集、差集與對稱差集等等
兩個(gè)類的構(gòu)造器具有相同的作用方式:
- class set([iterable ])
- class frozenset([iterable ])
集合可用多種方式來創(chuàng)建:
- 使用花括號(hào)內(nèi)以逗號(hào)分隔元素的方式: {‘jack’, ‘sjoerd’}
- 使用集合推導(dǎo)式: {c for c in ‘abracadabra’ if c not in ‘abc’}
- 使用類型構(gòu)造器: set(), set(‘foobar’), set([‘a’, ‘b’, ‘foo’])
set 和frozenset 的實(shí)例提供以下操作:
len(s)
計(jì)算集合 s 元素個(gè)數(shù)
x in s
檢測x是否為s中的成員
x not in s
檢測x 是否非s 中的成員
isdisjoint(other)
用于判斷兩個(gè)集合是否包含相同的元素,如果沒有返回 True,否則返回 False
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "facebook"} z = x.isdisjoint(y) print(z)
issubset(other)
用于判斷集合的所有元素是否都包含在指定集合中,如果是則返回 True,否則返回 False
x = {"a", "b", "c"} y = {"f", "e", "d", "c", "b", "a"} z = x.issubset(y)
issuperset(other)
用于判斷指定集合的所有元素是否都包含在原始的集合中,如果是則返回 True,否則返回 False。
x = {"f", "e", "d", "c", "b", "a"} y = {"a", "b", "c"} z = x.issuperset(y) print(z)
union(*others)
返回兩個(gè)集合的并集,即包含了所有集合的元素,重復(fù)的元素只會(huì)出現(xiàn)一次
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "apple"} z = x.union(y) print(z)
intersection(*others)
用于返回兩個(gè)或更多集合中都包含的元素,即交集。
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "apple"} z = x.intersection(y) print(z)
difference(*others)
用于返回集合的差集,即返回的集合元素包含在第一個(gè)集合中,但不包含在第二個(gè)集合(方法的參數(shù))中。
x = {"apple", "banana", "cherry"} y = {"google", "microsoft", "apple"} z = x.difference(y) print(z)
symmetric_difference(other)
返回兩個(gè)集合中不重復(fù)的元素集合,即會(huì)移除兩個(gè)集合中都存在的元素。
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "apple"} z = x.symmetric_difference(y) print(z)
copy()
用于拷貝一個(gè)集合。
sites = {"Google", "Runoob", "Taobao"} x = sites.copy() print(x)
可用于set 而不能用于不可變的frozenset 實(shí)例的操作:
update(*others)
用于修改當(dāng)前集合,可以添加新的元素或集合到當(dāng)前集合中,如果添加的元素在集合中已存在,則該元素只會(huì)出現(xiàn)一次,重復(fù)的會(huì)忽略。
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "apple"} x.update(y) print(x)
intersection_update(*others)
- intersection_update() 方法用于獲取兩個(gè)或更多集合中都重疊的元素,即計(jì)算交集。
- intersection_update() 方法不同于 intersection() 方法,因?yàn)?intersection() 方法是返回一個(gè)新的集合,而 intersection_update() 方法是在原始的集合上移除不重疊的元素。
x = {"apple", "banana", "cherry"} # y 集合不包含 banana 和 cherry,被移除 y = {"google", "runoob", "apple"} x.intersection_update(y) print(x)
difference_update(*others)
- difference_update() 方法用于移除兩個(gè)集合中都存在的元素。
- difference_update() 方法與 difference() 方法的區(qū)別在于 difference() 方法返回一個(gè)移除相同元素的新集合,而 difference_update() 方法是直接在原來的集合中移除元素,沒有返回值。
x = {"apple", "banana", "cherry"} y = {"google", "microsoft", "apple"} x.difference_update(y) print(x)
symmetric_difference_update(other)
symmetric_difference_update() 方法移除當(dāng)前集合中在另外一個(gè)指定集合相同的元素,并將另外一個(gè)指定集合中不同的元素插入到當(dāng)前集合中
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "apple"} x.symmetric_difference_update(y) print(x)
add(elem)
用于給集合添加元素,如果添加的元素在集合中已存在,則不執(zhí)行任何操作。
fruits = {"apple", "banana", "cherry"} fruits.add("orange") print(fruits)
remove(elem)
用于移除集合中的指定元素。
fruits = {"apple", "banana", "cherry"} fruits.remove("banana") print(fruits)
discard(elem)
如果元素elem 存在于集合中則將其移除
fruits = {"apple", "banana", "cherry"} fruits.discard("banana") print(fruits)
pop()
從集合中移除并返回任意一個(gè)元素。如果集合為空則會(huì)引發(fā)KeyError。
fruits = {"apple", "banana", "cherry"} fruits.pop() print(fruits)
clear()
用于移除集合中的所有元素。
fruits = {"apple", "banana", "cherry"} fruits.clear() print(fruits)
關(guān)系運(yùn)算
s_1024 = {"佩奇","老男孩","海峰","馬JJ","老村長","黑姑娘","Alex"} s_pornhub = {"Alex","Egon","Rain","馬JJ","Nick","Jack"} print(s_1024 & s_pornhub) # 交集, elements in both set print(s_1024 | s_pornhub) # 并集 or 合集 print(s_1024 - s_pornhub) # 差集 , only in 1024 print(s_pornhub - s_1024) # 差集, only in pornhub print(s_1024 ^ s_pornhub) # 對稱差集, 把腳踩2只船的人T出去
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用
這篇文章主要介紹了用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用,需要的朋友可以參考下2018-03-03Python 列表(List)的底層實(shí)現(xiàn)原理分析
這篇文章主要介紹了Python 列表(List)的底層實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Python設(shè)計(jì)模式之策略模式實(shí)例詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之策略模式,結(jié)合實(shí)例形式分析了策略模式的概念、原理并結(jié)合實(shí)例形式分析了Python定義與使用策略模式相關(guān)操作技巧,需要的朋友可以參考下2019-01-01python3跳出一個(gè)循環(huán)的實(shí)例操作
在本篇內(nèi)容里小編給大家整理的是關(guān)于python3跳出一個(gè)循環(huán)的實(shí)例操作內(nèi)容,有需要的朋友們可以參考下。2020-08-08Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)保存最后N個(gè)元素的方法
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法 保存最后N個(gè)元素的方法,涉及Python基于迭代器與生成器實(shí)現(xiàn)歷史記錄功能的相關(guān)操作技巧,需要的朋友可以參考下2018-02-02python3實(shí)現(xiàn)帶多張圖片、附件的郵件發(fā)送
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)帶多張圖片、附件的郵件發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08pandas中concatenate和combine_first的用法詳解
本文主要介紹了pandas中concatenate和combine_first的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01