Set集合:是Python的一个基本数据类型。一般不是很常用。Set中的元素是不重复的,无序的,里面的元素必须是可hash的(int,str,tuple,bool)。我们可以这样来计Set就是dict类型的数据但是不保存value,只保存key,set也用{}表示。
注意:set集合中的元素必须是可hash的,但是set本身是不可hash的,set是可变的。【即为:set内部不能有set】
#定义一个set集合 s = {'a'} print(s) print(type(s)) #实例化 s1 = set()#声明一个空set集合 #s3 = {123,[12,34,4]} #报错 TypeError: unhashable type: 'list' #s3 = {123,(12,34,4)} #正常 #s4 = {123,{12,34,4}} #报错
执行结果:
{'a'} <class 'set'>
set集合中的元素是不重复的,且无序的
#set中的元素是不重复的,且无序的 s2 = {'abc','12','bd','abc',True,False} print(s2) #去重 {False, True, '12', 'abc', 'bd'}
set中的常用操作:
1)增加
>>> s = {"张三","李四","王五"} >>> s.add("赵六") #重复的内容不会被添加到set集合中 >>> s {'王五', '李四', '赵六', '张三'} >>> s.update("薛七") #迭代更新 即把“薛”和“七”分别加入set集合 >>> s {'王五', '薛', '七', '李四', '赵六', '张三'}
2)删除
>>> s.pop()#随机删除一个元素 '王五' >>> s.remove("张三")#直接删除元素,如果不存在这个元素,删除会报错 >>> s {'薛', '七', '李四', '赵六'} >>> s.clear()#清空set集合需要注意的是set集合如果是空的,打印出来是set(),因为要和dict区分 >>> s set()
3)修改
set集合中的数据没有索引,也没用办法去定位一个元素,所以没有办法进行直接修改。我们可以采用先删除后添加的方式来完成修改操作。
>>> s = {"张三","李四","王五"} >>> s.remove("张三") >>> s.add("赵六") >>> s {'王五', '李四', '赵六'}
4)查询
set是一个可迭代对象,可以进行for循环
>>> for el in s: print(el) 王五 李四 赵六
5)常用操作
#求交集 >>> s1 = {"张三","李四","王五"} >>> s2 = {"王五","赵六","薛七"} >>> s1 & s2 {'王五'} >>> s1.intersection(s2) {'王五'} #求并集 >>> s1 | s2 {'王五', '薛七', '李四', '赵六', '张三'} >>> s1.union(s2) {'王五', '薛七', '李四', '赵六', '张三'} #求差集 >>> s1 - s2 {'李四', '张三'} >>> s1.difference(s2) {'李四', '张三'} #求反交集 集两个set集合中单独存在的数据元素 >>> s1 ^ s2 {'张三', '李四', '赵六', '薛七'} >>> s1.symmetric_difference(s2) {'张三', '李四', '赵六', '薛七'} #子集 >>> s3 = {"张三","李四"} >>> s4 = {"张三","李四","王五"} >>> s1 < s2 False >>> s3 < s4 True #超集 >>> s1 > s2 False >>> s3.issuperset(s4) False >>>