程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 集合set詳解(超詳細)

編輯:Python

文章目錄

  • Python內置函數/方法詳解—集合set
    • 1、構造集合
    • 2、基本計算
      • 2.1 -
      • 2.2 |
      • 2.3 &
      • 2.4 ^
    • 3、訪問項目
    • 4、內置函數
      • 4.1 打印輸出 print()
      • 4.2 計算集合內元素 len()
      • 4.3 返回變量類型 type()
      • 4.4 刪除集合 del
    • 5、內置方法
      • 5.1 添加元素 add()、updata()
      • 5.2 移除元素 remove()、discard()、pop()
      • 5.3 清空集合 clear()
      • 5.4 合並集合 union()、update()
      • 5.5 拷貝集合 copy()
      • 5.6 判斷是否包含相同元素 isdisjoint()
      • 5.7 返回交集 intersection()、intersection_update()
      • 5.8 判斷子集 issubset() 、issuperset()
      • 5.9 差集 difference() 、difference_update()
      • 5.10 移除元素 symmetric_difference()、symmetric_difference_update()
    • 6、 總結

Python內置函數/方法詳解—集合set

集合(set)是一個無序不重復元素序列。

1、構造集合

可以使用大括號 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。

1、使用大括號{}

basket = {
'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'apple', 'orange', 'banana', 'pear'}

當使用print()函數打印輸出時,會自動將集合中重復的元素去除,且每次打印返回的順序並不和初始的一致

2、使用set()函數

fruit = set(("apple", "banana", "cherry")) # 請留意這個雙括號
print(fruit) # {'banana', 'apple', 'cherry'}

在使用set()函數創建集合時,一定要注意雙括號

2、基本計算

經過上述學習,我們已經知道如何創建集合。而兩個集合之間的計算有4種,分別是-|&^

先創建兩個集合,方便下面對其進行運算。

a = set('abcdefg')
b = set('abg')

2.1 -

print(a - b) # {'e', 'd', 'f', 'c'}

a - b 表示:集合 a 中包含而集合 b 中不包含的元素

2.2 |

print(a | b) # {'d', 'b', 'e', 'c', 'g', 'f', 'a'}

a | b 表示:集合 a 或集合 b 中包含的所有元素

2.3 &

print(a & b) # {'a', 'b', 'g'}

a & b 表示:集合 a 和集合 b 都包含了的元素

2.4 ^

print(a ^ b) # {'e', 'c', 'd', 'f'}

a ^ b 表示:不同時包含集合 a 和集合 b 的元素

3、訪問項目

我們無法通過引用索引來訪問 set 中的項目,因為 set 是無序的,項目沒有索引

但是可以使用 for 循環遍歷 set 項目,或者使用 in 關鍵字查詢集合中是否存在指定值。

實例

遍歷集合,並打印值:

fruit = {
'apple', 'banana', 'cherry'}
for key in fruit:
print(key)

檢查 set 中是否存在 “banana”

fruit = {
'apple', 'banana', 'cherry'}
print('banana' in fruit)

若輸出True,則表示指定值存在於該集合中;若輸出False,則表示指定值不存在於該集合中。

4、內置函數

4.1 打印輸出 print()

1、print()函數

從上述構造集合中,我們可以得知 print() 的作用就是打印輸出小括號() 裡的內容或值。

4.2 計算集合內元素 len()

2、len()函數

當我們想要獲取集合 set 的長度,即確定集合中有多少項,就要使用 len() 方法。

print(len(basket)) # 4
print(len(fruit)) # 3

我們注意到,在上述構造集合 basket 和 fruit 時,在 {} 中填入6個元素,當我們使用len()函數定長時,會發現其自動去除重復的元素,再返回。

4.3 返回變量類型 type()

3、type()函數

print(type(basket)) # <class 'set'>

當我們使用 {}set() 構造好集合時,對其使用 type() 函數,會輸出set,則表明這是一個集合。

4.4 刪除集合 del

4、del函數

我們已經構造好 basket 和 fruit 這兩個集合,如果需要對其刪除則使用del函數

fruit = set(("apple", "banana", "cherry")) # 請留意這個雙括號
del fruit
print(fruit) # NameError: name 'fruit' is not defined.

注意:使用完del()函數刪除集合後,如再用print()函數打印時,會報錯NameError: name 'fruit' is not defined.,意為fruit未被定義,說明已刪除。

5、內置方法

5.1 添加元素 add()、updata()

1、add()方法

add() 方法用於給集合添加元素,如果添加的元素在集合中已存在,則不執行任何操作。

語法

set.add(element)

參數值

參數描述element必需。要添加到集合的元素。

實例

向 fruits 集合添加一個元素:

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

輸出結果:

{
'apple', 'banana', 'orange', 'cherry'}

如果該元素已存在,則 add() 方法就不會添加元素。

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

輸出結果:

{
'apple', 'banana', 'cherry'}

2、updata()方法

update() 方法用於修改當前集合,可以添加新的元素或集合到當前集合中,如果添加的元素在集合中已存在,則該元素只會出現一次,重復的會忽略。

語法

set.update(set)

參數值

參數描述set必需。插入當前集合的集合。

實例

合並兩個集合,重復元素只會出現一次:

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

輸出結果:

{
'banana', 'apple', 'google', 'runoob', 'cherry'}

5.2 移除元素 remove()、discard()、pop()

1、remove()方法

remove() 方法用於移除集合中的指定元素。

該方法不同於 discard() 方法,因為 remove() 方法在移除一個不存在的元素時會發生錯誤,而 discard() 方法不會。

語法

set.remove(item)

參數值

參數描述item必需。需要檢索並刪除的項目。

實例

移除元素 banana:

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

輸出結果:

{
'cherry', 'apple'}

2、discard()方法

discard() 方法用於移除指定的集合元素。

該方法不同於 remove() 方法,因為 remove() 方法在移除一個不存在的元素時會發生錯誤,而 discard() 方法不會。

語法

set.discard(value)

參數值

參數描述value必需。要檢索並刪除的項目。

實例

移除集合中的元素 banana:

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

輸出結果:

{
'cherry', 'apple'}

3、pop()方法

pop() 方法用於隨機移除一個元素。

語法

set.pop()

參數值

無參數值。

實例

隨機移除一個元素:

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

輸出結果:

{
'apple', 'banana'}

使用pop()方法刪除項目,但此方法將刪除最後一項。

同時請記住,集合set是無序的,因此您也不知道被刪除的是什麼項目。

5.3 清空集合 clear()

1、clear()方法

clear() 方法用於移除集合中的所有元素。

語法

set.clear()

參數值

無參數。

實例

移除 fruits 集合中的所有元素:

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

輸出結果:

set()

特別注意:clear() 功能是移除集合中所有元素,而del 功能是刪除集合

所以,當對一個集合使用clear()方法del函數,並分別對其使用print()函數打印輸出時,前者會返回一個空的集合即set(),而後者會報錯即NameError: name 'fruit' is not defined.

clear() 從內存刪除集合與清空集合,但內存地址不刪除,del() 則會從內存中刪除。

5.4 合並集合 union()、update()

在Python中,有幾種方法可以連接兩個或多個集合。

可以使用 union() 方法返回包含兩個集合中所有項目的新集合,也可以使用 update() 方法將一個集合中的所有項目插入另一個集合中。

1、union()方法

union() 方法返回兩個集合的並集,即包含了所有集合的元素,重復的元素只會出現一次。

語法

set.union(set1, set2 ...)

參數值

參數描述set1必需。要整合的集合。set2可選。要整合的另一集合。您能夠比較任意多的集合。集合由逗號分隔。

實例

合並兩個集合,重復元素只會出現一次:

set1 = {
'a', 'b', 'c'}
set2 = {
1, 2, 3, 'c'}
print(set1.union(set2))

輸出結果:

{
1, 2, 'b', 3, 'c', 'a'}

合並多個集合:

set1 = {
'a', 'b', 'c'}
set2 = {
1, 2, 3}
set3 = {
'A', 'B'}
print(set1.union(set2, set3))

輸出結果:

{
1, 2, 3, 'B', 'b', 'A', 'a', 'c'}

2、update()方法

update() 方法在前面已經講解過,在此僅作實例演示。

實例

update() 方法將 set2 中的項目插入 set1 中:

set1 = {
'a', 'b', 'c'}
set2 = {
1, 2, 3}
set1.update(set2)
print(set1)

輸出結果:

{
1, 2, 3, 'b', 'a', 'c'}

注釋

  • union() 和 update() 都將排除任何重復項。
  • 還有其他方法將兩個集合連接起來,並且僅保留重復項,或者永遠不保留重復項。

5.5 拷貝集合 copy()

copy() 方法用於拷貝一個集合。

語法

set.copy()

參數值

無參數。

實例

復制 fruits 集合:

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

輸出結果:

{
'apple', 'banana', 'cherry'}

5.6 判斷是否包含相同元素 isdisjoint()

isdisjoint() 方法用於判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。

語法

set.isdisjoint(set)

參數值

參數描述set必需。要在其中檢索相同項目的集合。

實例

判斷集合 y 中是否有包含 集合 x 的元素:

x = {
'a', 'b', 'c'}
y = {
'x', 'y', 'z'}
print(x.isdisjoint(y))

輸出結果:

True

注意isdisjoint() 方法在判斷兩個集合是否包含相同元素時,如果不包含相同的元素則返回True,而包含相同的元素則返回False

5.7 返回交集 intersection()、intersection_update()

1、intersection()方法

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

語法

set.intersection(set1, set2 ... etc)

參數值

參數描述set1必需。要在其中檢索相同項目的集合。set2可選。其他需要在其中檢索相同項目的集合。您可以比較任意多的集合。集合之間由逗號分隔。

實例

返回一個新集合,該集合的元素既包含在集合 x 又包含在集合 y 中:

x = {
'a', 'b', 'c'}
y = {
'x', 'y', 'z', 'c'}
print(x.intersection(y))

輸出結果:

{
'c'}

計算多個集合的交集:

x = {
'a', 'b', 'c'}
y = {
'x', 'y', 'z', 'c'}
z = {
'c', 'a', 'd'}
print(x.intersection(y, z))

輸出結果:

{
'c'}

返回的集合僅包含兩個集合中都存在的項目,或者如果使用兩個以上的集合進行比較,則在所有集合中都存在。

2、intersection_update()方法

intersection_update() 方法用於獲取兩個或更多集合中都重疊的元素,即計算交集。

語法

set.intersection_update(set1, set2 ... etc)

參數值

參數描述set1必需。要在其中檢索相等項目的集合。set2可選。要在其中檢索相等項目的另一集合。您能夠比較任意多的集合。集合由逗號分隔。

實例

移除 x 集合中不存在於 y 集合中的元素:

x = {
'a', 'b', 'c'} # y 集合不包含 a,被移除
y = {
'x', 'y', 'b', 'c'}
x.intersection_update(y)
print(x)

輸出結果:

{
'b', 'c'}

計算多個集合的並集:

x = {
'a', 'b', 'c'}
y = {
'c', 'd', 'e'}
z = {
'f', 'g', 'c'}
x.intersection_update(y, z)
print(x)

輸出結果:

{
'c'}

intersection_update() 方法不同於 intersection() 方法,因為 intersection() 方法是返回一個新的集合,而 intersection_update() 方法是在原始的集合上移除不重疊的元素。

5.8 判斷子集 issubset() 、issuperset()

1、issubset()方法

issubset() 方法用於判斷集合的所有元素是否都包含在指定集合中,如果是則返回 True,否則返回 False。

語法

set.issubset(set)

參數值

參數描述set必需。在其中檢索相等項目的集合。

實例

如果集合 y 中存在集合 x 中的所有項目,則返回 True:

x = {
'a', 'b', 'c'}
y = {
'x', 'y', 'z', 'a', 'b', 'c'}
print(x.issubset(y))

輸出結果:

True

如果沒有全部包含返回 False:

x = {
'a', 'b', 'c'}
y = {
'x', 'y', 'z', 'a'}
print(x.issubset(y))

輸出結果:

False

注意:使用x.issubset(y)時,簡單地說,當集合 x 中所有項目都存在於集合 y 中時,返回True,反之(集合 x 中有一個或多個都不存在於集合 y 中,就返回 False)。

2、issuperset()方法

issuperset() 方法用於判斷指定集合的所有元素是否都包含在原始的集合中,如果是則返回 True,否則返回 False。

語法

set.issuperset(set)

參數值

參數描述set必需。要在其中檢索相等項目的集合。

實例

判斷集合 y 的所有元素是否都包含在集合 x 中:

x = {
'a', 'b', 'c', 'x', 'y', 'z'}
y = {
'a', 'b', 'c'}
print(x.issuperset(y))

輸出結果:

True

如果沒有全部包含返回 False:

x = {
'a', 'x', 'y', 'z'}
y = {
'a', 'b', 'c'}
print(x.issuperset(y))

輸出結果:

False

issuperset()issubset() 類似,如果全都包含就返回True,反之(有一個或多個未包含)就返回False。

5.9 差集 difference() 、difference_update()

1、difference()方法

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

語法

set.difference(set)

參數值

參數描述set必需。要檢查其中差異的項目。

實例

返回一個集合,元素包含在集合 x ,但不在集合 y :

x = {
'a', 'b', 'c', 'x', 'y', 'z'}
y = {
'a', 'b', 'c'}
print(x.difference(y))

輸出結果:

{
'x', 'y', 'z'}

2、difference_update()方法

difference_update() 方法用於移除兩個集合中都存在的元素。

語法

set.difference_update(set)

參數值

參數描述set必需。要檢查其中差異的集合。

實例

移除兩個集合都包含的元素:

x = {
'a', 'b', 'c', 'x', 'y', 'z'}
y = {
'a', 'b', 'c'}
x.difference_update(y)
print(x)

輸出結果:

{
'x', 'z', 'y'}

difference_update() 方法與 difference() 方法的區別在於 difference() 方法返回一個移除相同元素的新集合,而 difference_update() 方法是直接在原來的集合中移除元素,沒有返回值

5.10 移除元素 symmetric_difference()、symmetric_difference_update()

1、symmetric_difference()方法

symmetric_difference() 方法返回兩個集合中不重復的元素集合,即會移除兩個集合中都存在的元素。

語法

set.symmetric_difference(set)

參數值

參數描述set必需。用於檢查匹配項的集合。

實例

返回兩個集合組成的新集合,但會移除兩個集合的重復元素:

x = {
'a', 'b', 'c', 'x', 'y', 'z'}
y = {
'a', 'b', 'c', 'Q', 'W', 'E'}
print(x.symmetric_difference(y))

輸出結果:

{
'x', 'Q', 'z', 'E', 'y', 'W'}

2、symmetric_difference_update()方法

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

語法

set.symmetric_difference_update(set)

參數值

參數描述set必需。用於檢查匹配項的集合。

實例

在原始集合 x 中移除與 y 集合中的重復元素,並將不重復的元素插入到集合 x 中:

x = {
'a', 'b', 'c', 'x', 'y', 'z'}
y = {
'a', 'b', 'c', 'Q', 'W', 'E'}
x.symmetric_difference_update(y)
print(x)

輸出結果:

{
'z', 'Q', 'x', 'W', 'E', 'y'}

6、 總結

函數描述print()打印輸出len()計算集合內元素type()返回變量類型del刪除集合方法描述add()為集合添加元素update()給集合添加元素remove()移除指定元素discard()刪除集合中指定的元素pop()隨機移除元素clear()移除集合中的所有元素union()返回兩個集合的並集copy()拷貝一個集合isdisjoint()判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 Falseintersection()返回集合的交集intersection_update()返回集合的交集issubset()判斷指定集合是否為該方法參數集合的子集issuperset()判斷該方法的參數集合是否為指定集合的子集difference()返回多個集合的差集difference_update()移除集合中的元素,該元素在指定的集合也存在symmetric_difference()返回兩個集合中不重復的元素集合。symmetric_difference_update()移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中

以上就是本文的全部內容啦!如果對您有幫助,麻煩點贊啦!收藏啦!歡迎各位評論區留言!!!

最後編輯於:2022/7/23 15:43


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved