集合的定义
由一个或多个确定的元素所构成的整体
可变集合
1 s=set('hello') 2 print(s) # {'e', 'l', 'o', 'h'} 3 4 s=set(['alex','alex','Lucy']) 5 print(s) # {'alex', 'Lucy'} 6 7 s = {1,2,3,4,5,6,7} 8 print(s)
不可变集合
1 s = {1,2,3,4,5,6,7} 2 print(s) # {1, 2, 3, 4, 5, 6, 7} 3 # 改为不可变集合 4 fs = frozenset(s) 5 print(fs) # frozenset({1, 2, 3, 4, 5, 6, 7})
集合的特性
1、确定性(元素必须可hash)
2、互异性(去重)
3、无序性(集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合)
注:集合存在的意义:去重和关系运算
去重
1 p_li = [1,2,3,4,3,5] 2 # 去重 3 p_s = set(p_li) 4 print(p_s) # {1, 2, 3, 4, 5}
集合的关系运算
1 p_s1 = {'张三','王五','李四'} 2 p_s2 = {'李四','王五','赵六'} 3 # 交集 4 print(p_s1.intersection(p_s2)) # {'李四', '王五'} 5 print(p_s1&p_s2) # {'李四', '王五'} 6 # 并集 7 print(p_s1.union(p_s2)) # {'张三', '李四', '王五', '赵六'} 8 print(p_s1|p_s2) # {'张三', '李四', '王五', '赵六'} 9 # 差集【A-交集】 10 print(p_s1.difference(p_s2)) # {'张三'} 11 print(p_s1-p_s2) # {'张三'} 12 # 对称差集【并集-交集】 13 print(p_s1.symmetric_difference(p_s2)) # {'赵六', '张三'} 14 print(p_s1^p_s2) # {'赵六', '张三'} 15 # A更新为交集 16 # p_s1.intersection_update(p_s2) 17 # A更新为差集 18 # p_s1.difference_update(p_s2) 19 # A更新为对称差集 20 # p_s1.symmetric_difference_update() 21 # print(p_s1)
集合的内置函数
常见
1 s = {1,2,3,4,5,6,7} 2 print(s) # {1, 2, 3, 4, 5, 6, 7} 3 # 添加 4 s.add('a') 5 print(s) # {1, 2, 3, 4, 5, 6, 7, 'a'} 6 # 清空 7 s.clear() 8 print(s) # set() 9 10 s = {1,2,3,4,5,6,7} 11 # 随机删除 12 s.pop() 13 print(s) 14 s = {1,2,3,4,5,6,7} 15 # 指定删除,若无报错 16 s.remove(5) 17 print(s) 18 s = {1,2,3,4,5,6,7} 19 # 指定删除,若无不报错 20 s.discard(8) 21 print(s)
补充
1 s = {1,2} 2 print(s) # {1, 2} 3 # 单个元素的增加 4 s.add(3) 5 print(s) # {1, 2, 3} 6 # 多个元素的增加 7 s.update([3,4],[7,8]) 8 print(s) # {1, 2, 3, 4, 7, 8} 9 s.update('hello') 10 print(s) # {1, 2, 3, 4, 'o', 7, 8, 'e', 'l', 'h'}
其他
1 p_s1 = {'张三','王五','李四'} 2 p_s2 = {'李四','王五','赵六'} 3 # 判断两个集合是不是相交 4 print(p_s1.isdisjoint(p_s2)) 5 # 判断集合是不是包含其他集合 6 print(p_s1.issuperset(p_s2)) 7 # 判断集合是不是被其他集合包含 8 print(p_s2.issubset(p_s2))