day3集合
""" set和list类似,拥有一系列元素,但是set和list不一样,set里面的元素是不允许重复的,而list里面可以包含相同的元素; set与list的另一个区别是,set里面的元素是没有顺序的。打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的 创建set的方式是使用set(),并传入一个list,list的元素将会被转换成set的元素 """ l1 = [1, 2, 3, 41, 1, 1] print(l1) # [1, 2, 3, 41, 1, 1] s1 = set([1, 3, 2, 41, 1, 1]) print(s1) # {1, 2, 3, 41},重复的元素都被去掉了,这是set的一个重要特点 s2 = set(s1) print(s2) # {1, 2, 3, 41} """ set的元素没有顺序,因此我们不能像list那样通过索引来访问。 访问set中的某个元素实际上就是判断一个元素是否在set中,这个时候我们可以使用in来判断某个元素是否在set中。 注意:set元素是区分大小写 """ names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena'] s3 = set(names) print('Bob' in s3) # True print('bob' in s3) # False, set元素是区分大小写 print('Alice' not in s3) # False """ set()中添加元素: 1、add()方法:单个元素添加 2、update()方法:批量元素添加 """ names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena'] set_names = set(names) set_names.add('Gina') print(set_names) # {'Alice', 'Bob', 'Ellena', 'Candy', 'David', 'Gina'} # 添加已存在的元素,再次添加'Gina' set_names.add('Gina') print(set_names) # {'Ellena', 'David', 'Bob', 'Gina', 'Alice', 'Candy'},已存在的元素,值不修改也不报错 # set_names.add('Gina', 'Zoey') # print(set_names) # TypeError: add() takes exactly one argument (2 given) new_names = ['Gina', 'Zoey'] set_names.update(new_names) print(set_names) # {'Zoey', 'Candy', 'Gina', 'Alice', 'David', 'Ellena', 'Bob'} # 直接update多个可迭代对象时,和extend方法类似 set_names.update('Gina', 'Zoey') print(set_names) # {'Zoey', 'Candy', 'Gina', 'Alice', 'a', 'o', 'G', 'David', 'Ellena', 'e', 'y', 'i', 'Bob', 'Z', 'n'} print('__________________________________') """ 删除set元素: 1、remove():删除的元素集合中不存在,会报错 2、discard():删除的元素集合中不存在,不会报错,用这个更高效 清除集合:clear() """ set_names.remove('Zoey') print(set_names) # 再次删除上面已被删除的元素'Zoey' # set_names.remove('Zoey') # print(set_names) # KeyError: 'Zoey' set_names.discard('Zoey') print(set_names) """ 打印结果: {'e', 'Z', 'David', 'Alice', 'n', 'Candy', 'o', 'a', 'y', 'Gina', 'G', 'Bob', 'i', 'Ellena'} {'e', 'Z', 'David', 'Alice', 'n', 'Candy', 'o', 'a', 'y', 'Gina', 'G', 'Bob', 'i', 'Ellena'} """ set_names.clear() print(set_names) # set() """ 练习: 针对以下set,给定一个list,对于list里面的每个元素,如果set中包含这个元素,就将其删除,否则添加到set里面去 L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] S = set([1, 3, 5, 7, 9, 11]) """ L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] S = set([1, 3, 5, 7, 9, 11]) for i in L: if i in S: S.remove(i) else: S.add(i) print(S) # {2, 4, 6, 8, 10, 11} """ 集合的子集和超集: s1.issubset(s2):判断s1是否为s2的子集 s2.issuperset(s1):判断s2是否为s1的超集 isdisjoint():判断两个集合是否有重合。如果有重合,返回False,否则返回True。 """ s1 = set([1, 2, 3, 4, 5]) s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 判断s1是否为s2的子集 print(s1.issubset(s2)) # True print(s2.issubset(s1)) # False # 判断s2是否为s1的超集 print(s2.issuperset(s1)) # True print(s1.isdisjoint(s2)) # False s3 = set([1,3]) s4 = set([1,2,4]) print(s3.isdisjoint(s4)) # False,有相同的元素就算重合 """ 练习: 已知两个集合s1、s2,请判断两个集合是否有重合,如果有,请把重合的元素打印出来。 s1 = set([1, 2, 3, 4, 5]) s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9]) """ s1 = set([1, 2, 3, 4, 5]) s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9]) flag = s1.isdisjoint(s2) # 方法一: if not flag: for i in s1: if i in s2: print(i) # 方法二: if not flag: for item in s1: if item not in s2: continue print(item) """ 打印结果: 1 2 3 4 5 """