天天看點

【Python】set集合詳解概述建立 set集合(2種)通路set集合元素删除set集合set集合中添加元素set集合中删除元素set集合做交集、并集、差集運算set集合方法詳解

set集合詳解

  • 概述
  • 建立 set集合(2種)
    • 1) 使用 {} 建立
    • 2) set()函數建立集合
  • 通路set集合元素
  • 删除set集合
  • set集合中添加元素
  • set集合中删除元素
  • set集合做交集、并集、差集運算
  • set集合方法詳解

概述

Python 中的集合,和數學中的集合概念一樣,用來儲存不重複的元素,即集合中的元素都是唯一的,互不相同。

從形式上看,和字典類似,Python 集合會将所有元素放在一對大括号

{}

中,相鄰元素之間用

“,”

分隔,如下所示:

其中,elementn 表示集合中的元素,個數沒有限制。

同一集合中,隻能存儲不可變的資料類型,包括整形、浮點型、字元串、元組,

無法存儲

清單、字典、集合這些可變的資料類型,否則 Python 解釋器會抛出

TypeError 錯誤

。比如說:

>>> {{'a':1}}
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    {{'a':1}}
TypeError: unhashable type: 'dict'
>>> {[1,2,3]}
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    {[1,2,3]}
TypeError: unhashable type: 'list'
>>> {{1,2,3}}
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    {{1,2,3}}
TypeError: unhashable type: 'set'
           

并且需要注意的是,資料必須保證是唯一的,因為集合對于每種資料元素,隻會保留一份。例如:

>>> {1,2,1,(1,2,3),'c','c'}
{1, 2, 'c', (1, 2, 3)}
           

由于 Python 中的

set 集合

是無序的,是以每次輸出時元素的排序順序可能都不相同。

其實,Python 中有兩種集合類型,一種是

set 類型

的集合,另一種是

frozenset 類型

的集合,它們唯一的差別是,

set 類型

集合可以做添加、删除元素的操作,而

forzenset 類型

集合不行。

建立 set集合(2種)

Python 提供了

2 種

建立 set 集合的方法,分别是使用

{}

建立和使用

set() 函數

将清單、元組等類型資料轉換為集合

1) 使用 {} 建立

在 Python 中,建立

set 集合

可以像清單、元素和字典一樣,直接将集合指派給變量,進而實作建立集合的目的,其文法格式如下:

其中,setname 表示集合的名稱,起名時既要符合 Python 命名規範,也要避免與 Python 内置函數重名。

舉個例子:

a = {1,'c',1,(1,2,3),'c'}
print(a)
輸出:{1, 'c', (1, 2, 3)}
           

2) set()函數建立集合

set() 函數

為 Python 的内置函數,其功能是将字元串、清單、元組、range 對象等可疊代對象轉換成集合。該函數的文法格式如下:

其中,iteration 就表示字元串、清單、元組、range 對象等資料。

例如:

set1 = set("c.biancheng.net")
set2 = set([1,2,3,4,5])
set3 = set((1,2,3,4,5))
print("set1:",set1)
print("set2:",set2)
print("set3:",set3)
輸出:
set1: {'a', 'g', 'b', 'c', 'n', 'h', '.', 't', 'i', 'e'}
set2: {1, 2, 3, 4, 5}
set3: {1, 2, 3, 4, 5}
           

注意,如果要建立空集合,隻能使用

set() 函數

實作。因為直接使用一對

{}

,Python 解釋器會将其視為一個空字典。

通路set集合元素

由于集合中的元素是無序的,是以無法向清單那樣使用下标通路元素。

Python 中,通路集合元素最常用的方法是使用循環結構,将集合中的資料逐一讀取出來。

例如:

a = {1, 'c', 1, (1, 2, 3), 'c'}
for ele in a:
    print(ele, end=' ')

輸出:c 1 (1, 2, 3) 
           

删除set集合

和其他序列類型一樣,手動函數集合類型,也可以使用

del()

語句,例如:

a = {1,'c',1,(1,2,3),'c'}
print(a)
del(a)
print(a)

輸出:
{1, 'c', (1, 2, 3)}
Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\1.py", line 4, in <module>
    print(a)
NameError: name 'a' is not defined
           

Python

set 集合

最常用的操作是向集合中添加、删除元素,以及集合之間做交集、并集、差集等運算

set集合中添加元素

set 集合中添加元素,可以使用 set 類型提供的

add() 方法

實作,該方法的文法格式為:

其中,setname 表示要添加元素的集合,element 表示要添加的元素内容。

需要注意的是,使用

add() 方法

添加的元素,隻能是數字、字元串、元組或者布爾類型(True 和 False)值,不能添加清單、字典、集合這類可變的資料,否則 Python 解釋器會報 TypeError 錯誤。例如:

a = {1,2,3}
a.add((1,2))
print(a)
a.add([1,2])
print(a)

輸出:
{(1, 2), 1, 2, 3}
Traceback (most recent call last):
  File "C:\Users\qinjl\Desktop\1.py", line 4, in <module>
    a.add([1,2])
TypeError: unhashable type: 'list'
           

set集合中删除元素

删除現有 set 集合中的指定元素,可以使用

remove() 方法

,該方法的文法格式如下:

使用此方法删除集合中元素,需要注意的是,如果被删除元素本就不包含在集合中,則此方法會抛出 KeyError 錯誤,例如:

a = {1,2,3}
a.remove(1)
print(a)
a.remove(1)
print(a)

輸出:
{2, 3}
Traceback (most recent call last):
  File "C:\Users\qinjl\Desktop\1.py", line 4, in <module>
    a.remove(1)
KeyError: 1
           

如果我們不想在删除失敗時令解釋器提示 KeyError 錯誤,還可以使用

discard() 方法

,此方法和

remove() 方法

的用法完全相同,唯一的差別就是,當删除集合中元素失敗時,此方法不會抛出任何錯誤。

a = {1,2,3}
a.remove(1)
print(a)
a.discard(1)
print(a)

輸出:
{2, 3}
{2, 3}
           

set集合做交集、并集、差集運算

集合最常做的操作就是進行交集、并集、差集以及對稱差集運算,首先有必要給大家普及一下各個運算的含義。

【Python】set集合詳解概述建立 set集合(2種)通路set集合元素删除set集合set集合中添加元素set集合中删除元素set集合做交集、并集、差集運算set集合方法詳解

圖中,有 2 個集合,分别為

set1={1,2,3}

set2={3,4,5}

,它們既有相同的元素,也有不同的元素。以這兩個集合為例,分别做不同運算的結果如下表所示。

運算操作 Python運算符 含義 例子
交集 & 取兩集合公共的元素

>>> set1 & set2

{3}

并集 | 取兩集合全部的元素

>>> set1 | set2

{1,2,3,4,5}

差集 - 取一個集合中另一集合沒有的元素

>>> set1 - set2

{1,2}

>>> set2 - set1

{4,5}

對稱差集 ^ 取集合

A

B

中不屬于

A&B

的元素

>>> set1 ^ set2

{1,2,4,5}

set集合方法詳解

>>> dir(set)
['add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
           

Python set方法

方法名 文法格式 功能 執行個體
add() set1.add() 向 set1 集合中添加數字、字元串、元組或者布爾類型

>>> set1 = {1,2,3}

>>> set1.add((1,2))

>>> set1

{(1, 2), 1, 2, 3}

clear() set1.clear() 清空 set1 集合中所有元素

>>> set1 = {1,2,3}

>>> set1.clear()

>>> set1

set()

set()才表示空集合,{}表示的是空字典

copy() set2 = set1.copy() 拷貝 set1 集合給 set2

>>> set1 = {1,2,3}

>>> set2 = set1.copy()

>>> set1.add(4)

>>> set1

{1, 2, 3, 4}

>>> set1

{1, 2, 3}

difference()  set3 = set1.difference(set2) 将 set1 中有而 set2 沒有的元素給 set3

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set3 = set1.difference(set2)

>>> set3

{1, 2}

difference_update() set1.difference_update(set2) 從 set1 中删除與 set2 相同的元素

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set1.difference_update(set2)

>>> set1

{1, 2}

discard() set1.discard(elem) 删除 set1 中的 elem 元素

>>> set1 = {1,2,3}

>>> set1.discard(2)

>>> set1

{1, 3}

>>> set1.discard(4)

{1, 3}

intersection() set3 = set1.intersection(set2) 取 set1 和 set2 的交集給 set3

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set3 = set1.intersection(set2)

>>> set3

{3}

intersection_update() set1.intersection_update(set2) 取 set1和 set2 的交集,并更新給 set1

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set1.intersection_update(set2)

>>> set1

{3}

isdisjoint() set1.isdisjoint(set2) 判斷 set1 和 set2 是否沒有交集,有交集傳回 False;沒有交集傳回 True

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set1.isdisjoint(set2)

False

issubset() set1.issubset(set2) 判斷 set1 是否是 set2 的子集

>>> set1 = {1,2,3}

>>> set2 = {1,2}

>>> set1.issubset(set2)

False

issuperset() set1.issuperset(set2) 判斷 set2 是否是 set1 的子集

>>> set1 = {1,2,3}

>>> set2 = {1,2}

>>> set1.issuperset(set2)

True

pop() a = set1.pop() 取 set1 中一個元素,并指派給 a

>>> set1 = {1,2,3}

>>> a = set1.pop()

>>> set1

{2,3}

>>> a

1

remove() set1.remove(elem) 移除 set1 中的 elem 元素

>>> set1 = {1,2,3}

>>> set1.remove(2)

>>> set1

{1, 3}

>>> set1.remove(4)

Traceback (most recent call last):

  File "<pyshell#90>", line 1, in <module>

    set1.remove(4)

KeyError: 4

symmetric_difference() set3 = set1.symmetric_difference(set2) 取 set1 和 set2 中互不相同的元素,給 set3

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set3 = set1.symmetric_difference(set2)

>>> set3

{1, 2, 4}

symmetric_difference_update() set1.symmetric_difference_update(set2) 取 set1 和 set2 中互不相同的元素,并更新給 set1

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set1.symmetric_difference_update(set2)

>>> set1

{1, 2, 4}

union() set3 = set1.union(set2) 取 set1 和 set2 的并集,賦給 set3

>>> set1 = {1,2,3}

>>> set2 = {3,4}

>>> set3=set1.union(set2)

>>> set3

{1, 2, 3, 4}

update() set1.update(elem) 添加清單或集合中的元素到 set1

>>> set1 = {1,2,3}

>>> set1.update([3,4])

>>> set1

{1,2,3,4}