1. 程式人生 > 程式設計 >Python3 集合set入門基礎

Python3 集合set入門基礎

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

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

集合、是字典的表親
{}並不是字典的特權

集合的特點:

1 具有唯一性
2 不支援索引
3 與字典相同,也是無序的

建立格式:

parame = {value01,value02,...}
或者
set(value)

建立方法

num1 = {1,2,3,4}
num2 = set(['q','w','e','r'])

print(num1,num2)

num3 = [1,4,1]
temp = num3.copy()
temp = set(temp)
print(temp)

例項

>>>basket = {'apple','orange','apple','pear','banana'}
>>> print(basket)           # 這裡演示的是去重功能
{'orange','banana','apple'}
>>> 'orange' in basket         # 快速判斷元素是否在集合內
True
>>> 'crabgrass' in basket
False
 
>>> # 下面展示兩個集合間的運算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                 
{'a','r','b','c','d'}
>>> a - b               # 集合a中包含而集合b中不包含的元素
{'r','d','b'}
>>> a | b               # 集合a或b中包含的所有元素
{'a','m','z','l'}
>>> a & b               # 集合a和b中都包含了的元素
{'a','c'}
>>> a ^ b               # 不同時包含於a和b的元素
{'r','l'}

類似列表推導式,同樣集合支援集合推導式(Set comprehension):

>>>a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r','d'}

集合的基本操作

1、新增元素

語法格式如下:

s.add( x )

將元素 x 新增到集合 s 中,如果元素已存在,則不進行任何操作。

>>>thisset = set(("Baidu","jb51","Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{'Facebook','Taobao','Baidu','jb51'}

輸出的內容都是隨機的沒有排序

還有一個方法,也可以新增元素,且引數可以是列表,元組,字典等,語法格式如下:

s.update( x )

x 可以有多個,用逗號分開。

>>>thisset = set(("Baidu","Jb51","Taobao"))
>>> thisset.update({1,3})
>>> print(thisset)
{1,'Jb51'}
>>> thisset.update([1,4],[5,6]) 
>>> print(thisset)
{1,5,6,'Jb51'}
>>>

2、移除元素

語法格式如下:

s.remove( x )

將元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤。

例項(Python 3.0+)

>>>thisset = set(("Baidu","Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Baidu','Jb51'}
>>> thisset.remove("Facebook")  # 不存在會發生錯誤
Traceback (most recent call last):
 File "<stdin>",line 1,in <module>
KeyError: 'Facebook'
>>>

此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:

s.discard( x )

例項(Python 3.0+)

>>>thisset = set(("Baidu","Taobao"))
>>> thisset.discard("Facebook") # 不存在不會發生錯誤
>>> print(thisset)
{'Taobao','Jb51'}

我們也可以設定隨機刪除集合中的一個元素,語法格式如下:

s.pop()

指令碼模式例項(Python 3.0+)

thisset = set(("Baidu","Taobao","Facebook"))
x = thisset.pop()
 
print(x)

輸出結果:

$ python3 test.py

Jb51

多次執行測試結果都不一樣。

set 集合的 pop 方法會對集合進行無序的排列,然後將這個無序排列集合的左面第一個元素進行刪除。

3、計算集合元素個數

語法格式如下:

len(s)

計算集合 s 元素個數。

例項(Python 3.0+)

>>>thisset = set(("Baidu","Taobao"))
>>> len(thisset)
3

4、清空集合

語法格式如下:

s.clear()

清空集合 s。

例項(Python 3.0+)

>>>thisset = set(("Baidu","Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()

5、判斷元素是否在集合中存在

語法格式如下:

x in s

判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

例項(Python 3.0+)

>>>thisset = set(("Baidu","Taobao"))
>>> "Jb51" in thisset
True
>>> "Facebook" in thisset
False
>>>

集合內建方法完整列表

方法 描述
add() 為集合新增元素
clear() 移除集合中的所有元素
copy() 拷貝一個集合
difference() 返回多個集合的差集
difference_update() 移除集合中的元素,該元素在指定的集合也存在。
discard() 刪除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。
issubset() 判斷指定集合是否為該方法引數集合的子集。
issuperset() 判斷該方法的引數集合是否為指定集合的子集
pop() 隨機移除元素
remove() 移除指定元素
symmetric_difference() 返回兩個集合中不重複的元素集合。
symmetric_difference_update() 移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中。
union() 返回兩個集合的並集
update() 給集合新增元素

下面繼續為大家補充一些例項

s.update( "字串" ) 與 s.update( {"字串"} ) 含義不同:

s.update( {"字串"} ) 將字串新增到集合中,有重複的會忽略。
s.update( "字串" ) 將字串拆分單個字元後,然後再一個個新增到集合中,有重複的會忽略。

>>> thisset = set(("Baidu","Taobao"))
>>> print(thisset)
{'Baidu','Jb51','Taobao'}
>>> thisset.update({"Facebook"})
>>> print(thisset) 
{'Baidu','Facebook'}
>>> thisset.update("Yahoo")
>>> print(thisset)
{'h','o','Facebook','Y','a'}
>>>

set() 中引數注意事項

1.建立一個含有一個元素的集合

>>> my_set = set(('apple',))
>>> my_set
{'apple'}

2.建立一個含有多個元素的集合

>>> my_set = set(('apple','banana'))
>>> my_set
{'apple','pear'}

3.如無必要,不要寫成如下形式

>>> my_set = set('apple')
>>> my_set
{'l','p','a'}
>>> my_set1 = set(('apple'))
>>> my_set1
{'l','a'}

集合用 set.pop() 方法刪除元素的不一樣的感想如下:

1、對於 python 中列表 list、tuple 型別中的元素,轉換集合是,會去掉重複的元素如下:

>>> list = [1,1,5]
>>> set(list)
{1,6}
>>> tuple = (2,5)
>>> set(tuple)
{2,6}

2、集合對 list 和 tuple 具有排序(升序),舉例如下:

>>> set([9,7,8])
{1,8,9}
>>> set([9,9}

3、集合的 set.pop() 的不同認為

有人認為 set.pop() 是隨機刪除集合中的一個元素、我在這裡說句非也!對於是字典和字元轉換的集合是隨機刪除元素的。當集合是由列表和元組組成時、set.pop() 是從左邊刪除元素的如下:

列表例項:

set1 = set([9,8])
print(set1)
print(set1.pop())
print(set1)

輸出結果:

{1,9}
1
{2,9}

元組例項:

set1 = set((6,9,0))
print(set1)
print(set1.pop())
print(set1)

輸出結果:

{0,9}
0
{1,9}

>>> thisset = set(("Baidu","Facebook"))
>>> y=set({'python'})
>>> print(y.union(thisset))
{'python','Jb51'}

輸出結果:

{'python','Jb51'}

y 的集合裡此時只含有一個元素 'python',而如果不加花括號時,y 的集合裡含有'p','y','t','h','n'五個元素。

>>> thisset = set(("Baidu","Facebook"))
>>> y=set('python')
>>> print(y.union(thisset))
{'p','n','t'}

也可以使用括號:

thisset = set(("Baidu","Facebook"))
y=set(('python','love'))
print(y.union(thisset))

輸出結果:

{'Facebook','python','love','Baidu'}

但是當 y 的集合裡只有一個字串時,結果與不加花括號一樣。

列表的 sort 方法可以實現就地排序(無需建立新物件,字串按首字母進行排序):

a=[1,51,31,-3,10]
a.sort()
print(a)

s=['a','ab','3e','z']
s.sort()
print(s)

輸出:

[-3,10,51]
['3e','a','z']

按集合中的字元長度進行排序:

a=[1,10]
a.sort()
print(a)

b=['a','3ae','zaaa','1']
b.sort()
print(b)

c=['a','1']
c.sort(key=len)
print(c)

輸出:

[-3,51]
['1','zaaa']
['a','1','zaaa']

下面是其他網友的補充圖文

集合也也也也是python內建的一種資料結構,它是一個無序且元素不重複的序列。這裡有兩個關鍵詞一個是無序,這一點和字典是一樣的,另一個關鍵詞是元素不重複,這一點和字典的key(鍵)是一樣的。這麼看來集合和字典還真像,事實上他們長的也很像:

Python3 集合set入門基礎

集合和字典一樣也是用{}包起來的,那麼問題來了,如果只寫一個{}那它是集合還是字典呢?

Python3 集合set入門基礎

{}裡沒有元素建立的是字典,那麼問題又來了,空集合又該怎麼建立呢?我們可以使用set()函式建立。既然集合已經創建出來了,接著就看看集合的一些用法吧。

1.往集合裡增加元素:

Python3 集合set入門基礎

集合的add函式可以往集合裡新增一個元素,update可以更新一個或多個元素,其引數可以是列表、集合等等。

2.刪除集合裡的元素。

Python3 集合set入門基礎

要刪除集合中的元素方法還挺多的啊,不過那個pop函式是認真的嗎?隨機移除元素也太隨意了吧...

由於集合是無序的,所以沒辦法用下標來獲取集合的元素,也沒辦法像字典一樣通過key來獲取值。這就尷尬了。看來集合就像貔貅一樣只能存資料不能取資料。

3.集合的運算

Python3 集合set入門基礎

交集和並集很好理解,差集是個相對的概念,集合1相對集合2差集和集合2相對集合1的差集是不一樣的,需要特別注意。所以對稱差集可以理解為非交集元素組成的那部分。

4.集合的包含關係

Python3 集合set入門基礎

集合的幾種關係:相交/不相交 ,包含/不包含(相對而言)。isdisjoint函式是判斷不相交的,不相交才返回True。