集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
集合是不可哈希的,即集合可变,集合内的元素是可哈希的,即元素不可变
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)print('b' in s1)#s1[1] #TypeError: 'set' object does not support indexing for i in s1: print(i)# # True# False# v# n# l# i# a
3、更新集合
可使用以下内建方法来更新:
s.add()
s.update()s.remove()注意只有可变集合才能更新:
# s1 = frozenset('alvin')# s1.add(0) #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'} s2.remove('l')print(s2) #{ 'mm', 'n', 'a', 'i', 'H', 'O', 'v'}
1 in ,not in
2 集合等价与不等价(==, !=)3 子集、超集(<,>)s=set('alvinyuan')s1=set('alvin')print('v' in s)print(s1
4 联合(|)--并集
联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。
s2=set('1234')s3=set('4567')print(s2.union(s3)) #{ '5', '6', '3', '4', '1', '2', '7'}print(s2|s3) #{ '5', '6', '3', '4', '1', '2', '7'}
5、交集(&)
与集合and等价,交集符号的等价方法是intersection()
s2=set('1234')s3=set('4567')print(s2.intersection(s3)) #{ '4'}print(s2&s3) #{ '4'}
6、差集(-)
等价方法是difference()
s2=set('1234')s3=set('4567')print(s2.difference(s3)) #{ '1', '2', '3'}print(s2-s3) #{ '1', '2', '3'}
7、对称差集(^)
对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()
s2=set('1234')s3=set('4567')print(s2.symmetric_difference(s3)) #{ '2', '5', '1', '7', '6', '3'}print(s2^s3) #{ '2', '5', '1', '7', '6', '3'}