python集合(set)
集合
1. 概念
集合(set):把不同的元素组成一个类似列表的序列集,是python的基本数据类型,只是其中的元素是无序和不可重复的,并且元素是可哈希的(整个set集合是可变的,不可哈希的),类似与字典中的key 值
2. 集合是一个无序的,不重复的数据组合,它的主要作用如下:
·去重,把一个有序列(如:列表,元组)变成一个集合,就会自动去重,例如:set([1,2,2,3])
·关系测试,测试两组数据的交集,差集,并集等关系
注意:集合的声明只有一种形式:set(参数为:有序列(如:列表,元组)),例如:set([1,2,2,3])
注意:集合中元素必须是可哈希的,但是集合本身是不可哈希的
3. 集合分类:可变集合、不可变集合
1.可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素
2.不可变集合(frozenset):与上面恰恰相反
定义声明
#定义声明集合 li = [12,23,"abolv"] s = set(li) s2 = {12,23,"abolv"} print(s) print(type(s)) print(s2) print(type(s2)) # {'abolv', 12, 23} # <class 'set'> # {'abolv', 12, 23} # <class 'set'>
集合访问
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。
#访问集合 li = ["abolv",24,"male"] s = set(li) print("abolv" in s) for i in s : print(i,end=" ") # True # 24 male abolv
更新集合
s.add()
s.update()
s.remove()
注意只有可变集合才能更新:
li = ["abolv",24,"male"] s = set(li) s.add("puker") print(s) s.update("pythoner") # 字符串中的字符作为元素添加,添加多个元素 print(s) s.update(["python","student"]) print(s) # {24, 'male', 'puker', 'abolv'} # {'n', 'h', 'o', 'r', 'p', 'y', 'puker', 'e', 't', 24, 'male', 'abolv'} # {'n', 'h', 'o', 'r', 'p', 'python', 'y', 'puker', 'e', 't', 24, 'male', 'student', 'abolv'} lis = ["abolv",24,"male"] ss = set(li) ss.remove("male") print(ss) # {24, 'abolv'}
del:删除集合本身
1.去重
#去重 # a = [1,2,2,3,4,"hello","world"] # b = set(a) # print(b) #结果:控制台输出 # {1, 2, 3, 4, 'world', 'hello'} #元素属于不可哈希出错 # a = [[1,2,2],3,4,"hello","world"] # b = set(a) #结果:控制台输出 # TypeError: unhashable type: 'list'
2.集合关系
集合类型操作符
1 .in ,not in
2 .集合等价与不等价(==, !=)
3 .子集、超集
# 子集 超集判断 s = set("abolv_puker") ss = set("abolv") print(ss in s) print(ss < s) # False # True
并集 |
#并集 s = set(["abolv","male",18]) ss = set(["puker","male",24]) res = s | ss # ===> res = s.union(ss) print(res) # {18, 24, 'puker', 'abolv', 'male'}
#去重之后的并集 a = set([1,2,3,4]) b = set([3,4,5,6]) print(a | b) # print(a.union(b))#符号| #结果:控制台输出 # {1, 2, 3, 4, 5, 6}
交集&
#交集 s = set(["abolv","male",18]) ss = set(["puker","male",24]) res = s & ss # =====> res = s.intersection(ss) print(res) # {'male'}
#集合交集 # a = set([1,2,3,4]) # b = set([3,4,5,6]) # print(a.intersection(b))#符号& #结果:控制台输出 # {3, 4}
差集 -
#差集 s = set(["abolv","male",18]) ss = set(["puker","male",24]) res = s - ss #=====> res = s.difference(ss) print(res) # {18, 'abolv'}
#集合差集 # a = set([1,2,3,4]) # b = set([3,4,5,6]) # print(a.difference(b))#符号- #结果:控制台输出 # {1, 2}
对称差集 ^
#对称差集 s = set(["abolv","male",18]) ss = set(["puker","male",24]) res = s ^ ss # =========> res = s.symmetric_difference(ss) print(res) # {18, 'abolv', 'puker', 24}
#集合对称差集(异或) # a = set([1,2,3,4]) # b = set([3,4,5,6]) # print(a ^ b) # print(a.symmetric_difference(b))#符号^ #结果:控制台输出 # {1, 2, 5, 6}