第七章 組合數(shù)據(jù)-3集合Set
set是一個(gè)無序且不重復(fù)的元素在{}中用逗號(hào)隔開,元素為不可變對(duì)象。類似數(shù)學(xué)里集合的概念,我們可以對(duì)集合進(jìn)行求差集、交集、并集等運(yùn)算。如果這些基本概念不太懂,請(qǐng)做下面的選擇題:
A跳過本節(jié),不學(xué)了 ???B自己查查集合的概念和操作 ???C接著往下看看 ???D隨便
我猜你選擇C,所以接著看看能不能懂吧。
s1 = set('alvin')???????? #創(chuàng)建集合s1
s2= frozenset('yuan')??? #創(chuàng)建凍結(jié)的集合s2,凍結(jié)后集合不能再添加或刪除任何元素。
print(s1,type(s1))??????? #{'l', 'v', 'i', 'a', 'n'} <class 'set'>
print(s2,type(s2))??????? #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>
print('a' in s1)? ?????????#True
print('b' in s1)??? ???????#False
for i in s1:
??? print(i)
集合本身是無序的,所以不能為集合創(chuàng)建索引或切片操作,只能循環(huán)遍歷或使用in、not in來訪問或判斷集合元素。
集合可使用以下方法來更新,但是注意只有可變集合才能更新,frozenset不可以更新。
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')????? # 添加多個(gè)元素
print(s2)??????????? # {'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}
?
刪除集合可以使用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
?
集合類型操作符
in ,not in
集合等價(jià)與不等價(jià)(==, !=)
?
子集、超集
s=set('alvinyuan')
s1=set('alvin')
print('v' in s)?????????????? # True
print(s1<s)??????????????? # True
?
聯(lián)合(union)操作與集合的or操作其實(shí)等價(jià)的,聯(lián)合符號(hào)有個(gè)等價(jià)的方法,union()。
s1=set('alvin')
s2=set('yuan')
s3=s1|s2???????????????????? #or操作
print(s3)????????????????????? #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
print(s1.union(s2))????????????? #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
?
交集(&)與集合and等價(jià),交集符號(hào)的等價(jià)方法是intersection()
s1=set('alvin')
s2=set('yuan')
s3=s1&s2???????????????????? #and操作
print(s3)????????????????????? #{'n', 'a'}
print(s1.intersection(s2))??????? #{'n', 'a'}
?
差集(-),等價(jià)方法是difference()
s1=set('alvin')
s2=set('yuan')
s3=s1-s2
print(s3)????????????????????? #{'v', 'i', 'l'}
?
print(s1.difference(s2))??????????? #{'v', 'i', 'l'}
?
對(duì)稱差集(^),對(duì)稱差分是集合的XOR(‘異或’),取得的元素屬于s1,s2但不同時(shí)屬于s1和s2.其等價(jià)方法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]