''' python 集合 集合: (1).集合是Python语言提供的内置数据结构之一 (2).与列表、字典一样都属于是可变序列 (3).集合是没有value的字典,也是用花括号{}创建 (4).元素之间用逗号分隔 (5).元素不允许重复,重复了不会报错但只会输出重复中的一个元素 (6).集合中的元素是无序的 一.集合的创建方式 1.使用花括号创建{} eg: sheng = {"shi",1,2,2,23,1} ###元素不允许重复,重复了不会报错但只会输出重复中的一个元素 输出: {1, 2, 'shi', 23} 2.使用内置函数set()创建 (1)将列表和range()转换成集合 eg1: s1 = set([23,435,6,2,1]) print(s1,type(s1)) 输出:{0,1, 2, 6, 435, 23}eg2: s1 = set(range(10)) print(s1,type(s1)) 输出: {1,2,3,4,5,6,7,8,9} (2)将元组转换成集合 eg: s2 = set((12,35,6,87,1)) print(s2,type(s2)) 输出: {1, 35, 6, 12, 87} (3)将字符串序列转换成集合 eg: s3 = set("python") print(s3,type(s3)) 输出:{'y', 'h', 'o', 't', 'p', 'n'} (4)使用set()创建集合 eg: s4 = set({1,243,54,65,2}) print(s4,type(s4)) 输出:{65, 2, 1, 243, 54} (5)创建一个空集合set() eg: print(set()) ####不能使用{}来直接定义一个空集合 eg :s5 = {} print(s5,type(s5)) 输出: {} 二.集合的增、删、改操作 1.查找集合中是否存在该元素 语法格式1: 元素 in 集合名 语法格式2: 元素 not in 集合名 2.集合中元素的新增 (1)向集合中添加一个元素 语法格式: 集合名.add(元素) eg: sheng = {1,2,3,4,5,6,7} sheng.add(10) print(sheng) 输出: {1, 2, 3, 4, 5, 6, 7, 10} (2)向集合中添加一个或多个元素 语法格式: 集合名.update({元素1,元素2,元素3,.....}) ### update()里面放列表、元组、range()也可以 eg: sheng = {1,2,3,4,5,6,7} sheng.update({8,9,10}) print(sheng) 输出: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 3.集合中元素的删除 (1)一次删除一个元素,调用方法remove(),discard() 语法格式: 集合名.remove(元素) 或者 集合名.discard(元素) eg: sheng = {1,2,3,4,5,6,7} sheng.remove(3) print(sheng) 输出: {1, 2, 4, 5, 6, 7} ###如果删除的元素在集合中不存在,则会抛出error eg: sheng = {1,2,3,4,5,6,7} sheng.discard(6) print(sheng) 输出: {1, 2, 3, 4, 5, 7} ###如果删除的元素在集合中不存在,并不会抛出error (2)任意删除集合中的一个元素,调用pop()方法 语法格式: 集合名.pop() ## pop()不能有参数 eg: sheng = {1,2,3,4,5,6,7} sheng.pop() print(sheng) 输出: {2, 3, 4, 5, 6, 7} (3)清空集合中的元素,调用方法clear() 语法格式: 集合名.clear() eg: sheng = {1,2,3,4,5,6,7} sheng.clear() print(sheng) 输出: set() 三.集合之间的关系 1.判断俩个集合是否相等(元素相同就相等) 语法格式: 集合1 == 集合2 或者 集合1 != 集合2 eg: s1 = {2,3,4,5,6} s2 = {6,5,4,3,2} print(s1 == s2) ### 判断俩个集合是否相等 与集合中的元素顺序无关。 print(s1 != s2) 输出: True False 2.一个集合是否是另一个集合的子集,通过方法issubset() 语法格式: 集合1.issubset(集合2) ## 解释: 集合1 是 集合2 的子集 eg: s1 = set(range(10)) s2 = {1,2,3,4,5} s3 = {7,8,9,10,11} print(s2.issubset(s1)) print(s3.issubset(s1)) 输出: True False 3.一个集合是否是另一个集合的超集 语法格式: 集合1.issuperset(集合2) ## 解释: 集合1 是 集合2 的超集 eg: s1 = set(range(10)) s2 = {1,2,3,4,5} print(s1.issuperset(s2)) print(s2.issuperset(s1)) 4.判断俩个集合是否有交集 语法格式: 集合1.isdisjoint(集合2) ##解释: 如果有交集则返回false 没有交集则返回true。 isdisjoint: 没有交集 eg: s1 = set(range(10)) s2 = {1,2,3,4,5} s3 = {10,11,12,13} print(s1.isdisjoint(s2)) ## false 有交集 print(s1.isdisjoint(s3)) ## true 没有交集 输出: False True 四.集合的数学操作 1.交集 语法格式:集合1.intersection(集合2) 等价于 集合1 & 集合2 eg: s1 = set(range(10)) s2 = {1,2,3,4,5} print(s1.intersection(s2)) 或者 print(s1 & s2) 输出: {1, 2, 3, 4, 5} 2.并集 语法格式:集合1.union(集合2) 等价于 集合1 | 集合2 eg: s1 = set(range(6)) s2 = set(range(6,11)) print(s1.union(s2)) 或者 print(s1 | s2) 输出: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 3.差集 语法格式: 集合1.difference(集合2) 等价于 集合1-集合2 解释: 用 集合1 中的元素与 集合2 中的元素相减 ,相同的去掉,不同的只留 集合1 中的元素 eg: s1 = {10,20,30,40} s2 = {30,40,50,60} print(s1.difference(s2)) 或者 print(s1-s2) 输出: {10, 20} 4.对称差集 语法格式:集合1.symmetric_difference(集合2) 等价于 集合1^集合2 解释: 去除俩个集合相同部分,保留俩个集合不同部分。 可以理解成先将俩个集合作交集,再作并集 eg: s1 = {10,20,30,40} s2 = {30,40,50,60} print(s1.symmetric_difference(s2)) 或者 print(s1^s2) 输出:{10, 50, 20, 60} 五.集合生成式 ## 与列表生成式差不多,只需将其[]改成{}就可以 eg: sheng = [i*i for i in range(6)] print(sheng,type(sheng)) 输出: [0,1,4,9,16,25] eg: sheng = {i*i for i in range(6)} print(sheng,type(sheng)) 输出: {0,1,4,9,16,25} '''