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'} <class 'set'>
>>> print(s2,type(s2)) #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>
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<s)
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]