首頁 > 軟體

Python的集合型別之set和frozenset詳解

2022-03-15 13:03:02

集合型別— set, frozenset

set 物件是由具有唯一性的hashable 物件所組成的無序多項集。常見的用途包括成員檢測、從序列中去除重複項以及數學中的集合類計算,例如交集、並集、差集與對稱差集等等

兩個類的構造器具有相同的作用方式:

  • class set([iterable ])
  • class frozenset([iterable ])

集合可用多種方式來建立:

  • 使用花括號內以逗號分隔元素的方式: {‘jack’, ‘sjoerd’}
  • 使用集合推導式: {c for c in ‘abracadabra’ if c not in ‘abc’}
  • 使用型別構造器: set(), set(‘foobar’), set([‘a’, ‘b’, ‘foo’])

set 和frozenset 的範例提供以下操作:

len(s)

計算集合 s 元素個數

x in s

檢測x是否為s中的成員

x not in s

檢測x 是否非s 中的成員

isdisjoint(other)

用於判斷兩個集合是否包含相同的元素,如果沒有返回 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)

返回兩個集合的並集,即包含了所有集合的元素,重複的元素只會出現一次

x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.union(y) 
print(z)

intersection(*others)

用於返回兩個或更多集合中都包含的元素,即交集。

x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.intersection(y) 
print(z)

difference(*others)

用於返回集合的差集,即返回的集合元素包含在第一個集合中,但不包含在第二個集合(方法的引數)中。

x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}
z = x.difference(y) 
print(z)

symmetric_difference(other)

返回兩個集合中不重複的元素集合,即會移除兩個集合中都存在的元素。

x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.symmetric_difference(y) 
print(z)

copy()

用於拷貝一個集合。

sites = {"Google", "Runoob", "Taobao"}
x = sites.copy()
print(x)

可用於set 而不能用於不可變的frozenset 範例的操作:

update(*others)

用於修改當前集合,可以新增新的元素或集合到當前集合中,如果新增的元素在集合中已存在,則該元素只會出現一次,重複的會忽略。

x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.update(y) 
print(x)

intersection_update(*others)

  • intersection_update() 方法用於獲取兩個或更多集合中都重疊的元素,即計算交集。
  • intersection_update() 方法不同於 intersection() 方法,因為 intersection() 方法是返回一個新的集合,而 intersection_update() 方法是在原始的集合上移除不重疊的元素。
x = {"apple", "banana", "cherry"}  # y 集合不包含 banana 和 cherry,被移除 
y = {"google", "runoob", "apple"}
x.intersection_update(y) 
print(x)

difference_update(*others)

  • difference_update() 方法用於移除兩個集合中都存在的元素。
  • difference_update() 方法與 difference() 方法的區別在於 difference() 方法返回一個移除相同元素的新集合,而 difference_update() 方法是直接在原來的集合中移除元素,沒有返回值。
x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}
x.difference_update(y) 
print(x)

symmetric_difference_update(other)

symmetric_difference_update() 方法移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中

x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.symmetric_difference_update(y) 
print(x)

add(elem)

用於給集合新增元素,如果新增的元素在集合中已存在,則不執行任何操作。

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()

從集合中移除並返回任意一個元素。如果集合為空則會引發KeyError。

fruits = {"apple", "banana", "cherry"}
fruits.pop() 
print(fruits)

clear()

用於移除集合中的所有元素。

fruits = {"apple", "banana", "cherry"}
fruits.clear()
print(fruits)

關係運算

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出去

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!  


IT145.com E-mail:sddin#qq.com