Python set(集合)

dav2100發表於2021-09-09

set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。

集合是一個無序的,不重複的資料組合,它的主要作用如下:

去重,把一個列表變成集合,就自動去重了

關係測試,測試兩組資料之前的交集、差集、並集等關係

集合(set):把不同的元素組成一起形成集合,是python基本的資料型別。

集合元素(set elements):組成集合的成員(不可重複)

>>> li=[1,2,'a','b'] 

>>> s =set(li)

>>> print(s)             # {1, 2, 'a', 'b'}

>>> li2=[1,2,1,'a','a']

>>> s=set(li2)

>>> print(s)             #{1, 2, 'a'}      重複元素在set中自動被過濾:

 #注意,傳入的引數[1, 2, 3]是一個list,而顯示的{1, 2, 3}只是告訴你這個set內部有1,2,3這3個元素,

 顯示的順序也不表示set是有序的。。

集合的相關操作  

1、建立集合

由於集合沒有自己的語法格式,只能透過集合的工廠方法set()和frozenset()建立

>>> s1 = set('alvin')

>>> s2= frozenset('yuan')

>>> print(s1,type(s1))               #{'l', 'v', 'i', 'a', 'n'}

>>> print(s2,type(s2))               #frozenset({'n', 'y', 'a', 'u'})

2、訪問集合

由於集合本身是無序的,所以不能為集合建立索引或切片操作,只能迴圈遍歷或使用in、not in來訪問或判斷集合元素。

>>> s1 = set('alvin')

>>> print('a' in s1)     #True

>>> print('b' in s1)     #False

>>> #s1[1]  #TypeError: 'set' object does not support indexing

>>> for i in s1:

>>>     print(i)        #l     i    n   v    a

3、更新集合

可使用以下內建方法來更新:

s.add()

s.update()

注意只有可變集合才能更新:

>>> #s1 = frozenset('alvin')

>>> #print(s1)           #frozenset({'a', 'n', 'i', 'v', 'l'})

>>> #s1.add("ccdc")      #AttributeError: 'frozenset' object has no attribute 'add'

>>> s2 = set('alvin')

>>> s2.add('mm')

>>> print(s2)  # {'mm', 'l', 'n', 'a', 'i', 'v'}

>>> s2.update('HO')  # 新增多個元素

>>> print(s2)  # {'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}

4、刪除集合

s.remove()

>>> s2 = set('alvin')

>>> >>> print(s2)  # { 'l', 'n', 'a', 'i', 'v'}

>>> s2.remove('l')

>>> print(s2)  # {'n', 'a', 'i',  'v'}

>>> del s2   #刪除集合本身 

>>> print(s2)    #NameError: name 's2' is not defined

四、集合型別運算子 

1   in ,not in

2   集合等價與不等價(==, !=)

3   子集、超集

s=set('alvinyuan')

s1=set('alvin')

print('v' in s)

print(s1

4   聯合(|)

聯合(union)操作與集合的or操作其實等價的,聯合符號有個等價的方法,union()。

s1=set('alvin')

s2=set('yuan')

s3=s1|s2

print(s3)  #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}

print(s1.union(s2)) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'} 

5、交集(&)

與集合and等價,交集符號的等價方法是intersection()

s1=set('alvin')

s2=set('yuan')

s3=s1&s2

print(s3)  #{'n', 'a'}

print(s1.intersection(s2)) #{'n', 'a'}

6、查集(-)

等價方法是difference()

s1=set('alvin')

s2=set('yuan')

s3=s1-s2

print(s3)  #{'v', 'i', 'l'}

print(s1.difference(s2)) #{'v', 'i', 'l'} 

7、對稱差集(^)

對稱差分是集合的XOR(‘異或’),取得的元素屬於s1,s2但不同時屬於s1和s2.其等價方法symmetric_difference()

s1=set('alvin')

s2=set('yuan')

s3=s1^s2

print(s3)  #{'l', 'v', 'y', 'u', 'i'}

print(s1.symmetric_difference(s2)) #{'l', 'v', 'y', 'u', 'i'}

應用

'''最簡單的去重方式'''

lis = [1,2,3,4,1,2,3,4]

print list(set(lis))    #[1, 2, 3, 4]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2802431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章