0、什么是集合?
集合是一个无序的,不重复的数据组合,它的主要作用如下:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
集合元素(set elements):组成集合的成员(不可重复)
集合对象是一组无序排列的可哈希(不可变,类似字典的键)的值:集合成员可以做字典的键
集合分类:可变集合、不可变集合
可变集合(set):可添加和删除元素,非可哈希的,不能作为字典的键,也不能做其他集合的元素
不可变集合(frozenset):与上面恰恰相反
li=[[1,2],'a','b'] s =set(li) # TypeError: unhashable type: 'list' print(s)
a=set('alex li a') #有多个 a print(a) {' ', 'l', 'i', 'a', 'x', 'e'} # 集合会把重复的去掉,并无序的打印出来 b=['aaa','bbb','aaa'] s=set(b) print(s) {'aaa', 'bbb'} # 列表里有重复,会把重复的去掉
1、创建集合
由于集合没有自己的语法格式,只能通过集合的方法 set() 和 frozenset() 创建,或者 {} 来创建
s1 = set('alvin') s2= frozenset('yuan') # 不可变集合 s3={1,2,3} print(s1,type(s1)) #{'l', 'v', 'i', 'a', 'n'} <class 'set'> print(s2,type(s2)) #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>
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、更新集合
可使用以下内建方法来更新:
set.add():增
set.remove():删
set.update():改
注意:只有可变集合才能更新:
# s1 = frozenset('alvin') # s1.add(0) #AttributeError: 'frozenset' object has no attribute 'add' s2=set('alvin') s2.add('mm') # ‘mm’ 会作为一个整体存入 print(s2) #{'mm', 'l', 'n', 'a', 'i', 'v'} s2.update('HO')# 添加多个元素,把 HO 拆开,作为单个元素添加进去,如果有重复的,会去重 print(s2) #{'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}
s2.update([12,'alex','eee','alvin']) # 列表里面,元素是一个整体, print(s2) # {'l', 'n', 'alvin', 'a', 12, 'i', 'alex', 'v', 'eee'} s2.remove('l') # 指定删除,当值不存在时,会报错 print(s2) #{'mm', 'n', 'a', 'i', 'H', 'O', 'v'} s2.discard('vvvv') # 指定删除,当值不存在时,不会报错 s2.pop() # 随机删除一个元素 s2.clear() # 清空集合 del s2:删除集合本身
4、集合类型操作符
1 in ,not in:判断某元素是否在集合内
2 集合等价与不等价(==, !=)
3 子集、超集
4 print(a.isdisjoint(b)),两个集合没有任何关联就返回为真