07集合
1 """ 2 1.集合是一个序列:无序的,元素不重复的(唯一),可哈希的(不可变的) 3 可哈希的对象:字符串,元组,整数,数值,不可变的集合frozenset 4 哈希函数 hash() 5 集合分两种: 6 1)可变集合: set() ,{1, 2, 3} 7 2)不可变集合:frozenset() 8 3)集合不支持索引,切片等操作 9 4.集合的作用1:去重复 10 5集合支持for循环遍历,因为集合是无序的,所以遍历的结果跟定义时的顺序不一样 11 6.集合支持成员运算符,in / not in 12 """ 13 # print(hash("abc")) # 6318428076096384784 14 # print(hash(1)) # 1 15 # print(hash(123456)) # 123456 16 # # print(hash([1, 2, 3])) # TypeError: unhashable type: 'list' 17 # set_1 = set() 18 # print(set_1) 19 # print(type(set_1)) 20 # set_2 = frozenset() 21 # print(set_2) 22 # print(type(set_2)) 23 # # set() 24 # # <class 'set'> 25 # # frozenset() 26 # # <class 'frozenset'> 27 # set_3 = set([1, 2, 1, 1, 3]) 28 # print(set_3) # {1, 2, 3} 29 # list_1 = [4, 5, 6, 4, 5, 6] 30 # set_4 = set(list_1) 31 # print(set_4) # {4, 5, 6} 32 # # set_5 = set(1) # TypeError: 'int' object is not iterable 33 # set_5 = frozenset(list_1) 34 # print(set_5) # frozenset({4, 5, 6}) 35 # set_6 = {"a", 4, 5} 36 # print(set_6) # {4, 5, 'a'} 37 38 # set_1 = {1, 2, "abc", "ccc", 5, 6} 39 # for i in set_1: 40 # print(i) 41 # print(1 in set_1) # True 42 # print(10 in set_1) # false 43 """ 44 可变集合,添加元素: 45 1.内建方法, .add(元素) 46 """ 47 # set_1.add(10) 48 # print(set_1) # {1, 2, 'ccc', 5, 6, 10, 'abc'} 49 # set_1.add(10) # 集合中的元素必须是唯一的 50 # print(set_1) # print(set_1) 51 """ 52 可变集合,删除元素: 53 1.内建方法,remove(被删除的元素),被删元素如不存在,报错 54 2.内建方法, discard(被删除的元素),被删元素如不存在,不报错 55 3.内建方法,pop() 随机删除一个元素 56 4.内建方法,clear() 清空集合中的元素 57 5.关键字 del set_1 删除集合对象 58 """ 59 # set_1.remove("abc") 60 # print(set_1) # {1, 2, 5, 6, 'ccc', 10} 61 # set_1.discard("ccc") 62 # print(set_1) # {1, 2, 5, 6, 10} 63 # # set_1.remove("abc") # KeyError: 'abc' 64 # set_1.discard("abc") # 不报错,什么都不做 65 # print(set_1) 66 # set_1.pop() # 随即删除集合中的某个元素 67 # print(set_1) 68 # set_1.clear() 69 # print(set_1) # set() 70 # del set_1 71 # # print(set_1) # NameError: name 'set_1' is not defined 72 73 """ 74 集合之间支持 联合(|).交集(&).差补(-)和对称差分(^)的操作 75 联合(|):集合a的元素加上集合b的元素,合成一个新的集合 76 交集(&):共同属于集合a与集合b的元素 77 差补(-):只属于集合a 或 只属于 78 对称差分(^):只属于集合a 和 只属于集合b 的元素 79 运算结果的集合类型取决于运算符左侧的集合类型。 80 """ 81 # set_1 = set('abchiklm') # 可变的集合 82 # frozenset_1 = frozenset("abcdefg") # 不可变的集合(冻结的集合) 83 # print(set_1) 84 # print(frozenset_1) 85 # {'h', 'l', 'c', 'm', 'a', 'b', 'k', 'i'} 86 # frozenset({'f', 'd', 'c', 'a', 'g', 'b', 'e'}) 87 # print(set_1 | frozenset_1) 88 # print(set_1 & frozenset_1) 89 # print(frozenset_1 ^ set_1) 90 # print(frozenset_1 - set_1) 91 # print(set_1 - frozenset_1) 92 # {'h', 'f', 'l', 'd', 'c', 'e', 'm', 'a', 'g', 'b', 'k', 'i'} 93 # {'b', 'c', 'a'} 94 # frozenset({'h', 'f', 'l', 'd', 'e', 'm', 'g', 'k', 'i'}) 95 # frozenset({'d', 'f', 'e', 'g'}) 96 # {'h', 'l', 'm', 'k', 'i'} 97 """ 98 Python 另外提供了仅适用于set集合的操作符,包括 99 |=(联合更新).&=(交集更新).-=(差补更新)和^=(对称差分更新) 100 """ 101 # set_1 = {1, 2, 3, 4, 5} 102 # frozenset_1 = {3, 4, 5, 6, 7, 8} 103 # set_1 -= frozenset_1 # {1, 2} 104 # print(set_1) 105 # frozenset_1 -= set_1 # frozenset_1 ,不可变,不管做什么操作都不变 106 # print(frozenset_1) # {3, 4, 5, 6, 7, 8} 107 # set_2 = {3, 4, 5, 6, 7} 108 # set_1 |= set_2 109 # print(set_1) # {1, 2, 3, 4, 5, 6, 7} 110 # set_1 &= set_2 111 # print(set_1) # {3, 4, 5, 6, 7} 112 # set_1 -= set_2 113 # print(set_1) # set() 114 # set_1 = set([2, 2, "a", "a", 5]) 115 # set_1 ^= set_2 116 # print(set_1) # {2, 3, 4, 6, 7, 'a'} 117 # set_1 &= set_2 118 # print(set_1) # {3, 4, 6, 7} 119 120 """ 121 张三,李四,王五,赵六,郝七 (set_a) 122 语文成绩:王五,赵六,郝七,郭八,少九 (set_b) 123 1.求 两个兴趣组一共有哪些人? set_a | set_b 124 2.求 既在语文兴趣组又在数学兴趣组的人是哪些 set_a & set_b 125 3.求 把只在语文兴趣组中的学生留下 set_a - set_b 126 4.求 把只在数学兴趣组中的学生留下 set_b - set_a 127 5.求 只报了语文兴趣组 和 只报了数学兴趣组 的学生共有哪些人 set_a^set_b 128 """ 129 """ 130 集合中可以判断一个集合是不是另一个集合的子集或超集,结果为布尔值 131 a < b a是不是b的子集(小于) 132 a > b a是不是b的超集(大于) 133 a <= b a是不是b的非严格子集(允许a和b的值相等) 134 a >= b a是不是b的非严格超集(允许a和b的值相等) 135 """ 136 # a = {1, 2, 3, 4, 5} 137 # b = {3, 5} 138 # print(a < b) # True 139 # print(b < a) # True