# 集合 # 概念 # 无序的, 不可随机访问的, 不可重复的元素集合 # 与数学中集合的概念类似,可对其进行交、并、差、补等逻辑运算 # 分为可变集合和非可变集合 # set # 为可变集合 # 增 # 删 # 改 # frozenset # 不可变集合 # 创建好之后, 无法增删改 # 定义 # 可变集合set # s = {1,2,3,4} # s = set(iterable) # 其中iterable可以是字符串、列表、元组、字典等 # 但是为dict时,只会获取提Key作为set的元素 # 集合推导式 # s = set(x**2 for x in range(1, 10) if x % 2 == 0) # s = {推导式} # 不可变集合frozenset # fs = frozenset(iterable) # 其中iterable可以是字符串、列表、元组、字典等 # 但是为dict时,只会获取提Key作为set的元素 # 集合推导式 # s = frozenset(x**2 for x in range(1, 10) if x % 2 == 0) # 注意 # 1. 创建一个空集合时, 需要使用set() 或者 frozenset(), 不能使用 s = {} # 会被识别成为字典 # 2. 集合中的元素, 必须是可哈希的值 # 如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的, # 那么它就是可哈希的(hashable)的 # 暂时理解为 不可变类型 # 3. 如果集合中的元素值出现重复, 则会被合并为1个 # 常用操作 # 单一集合操作 # 可变集合 # 增 # s.add(element) # 注意: # 必须保证添加的元素是可哈希的值 # 删 # s.remove(element) # 指定删除set对象中的一个元素 # 如果集合中没有这个元素,则返回一个错误 # s.discard(element) # 指定删除集合中的一个元素 # 若没有这个元素,则do nothing # s.pop(element) # 随机删除并返回一个集合中的元素 # 若集合为空,则返回一个错误 # s.clear() # 清空一个集合中的所有元素 # 改 # 元素为不可变类型, 不能修改 # 查 # 无法通过索引或key进行查询 # 1. 通过 for in 进行遍历 s = {1, 2, 3} for v in s: print(v) # 2. 通过迭代器进行访问 its = iter(s) #生成迭代器 print(next(its)) #1 print(next(its)) #2 print(next(its)) #3 its = iter(s) #需要从新生成,因为上面的next已经移动指针到最后 #for in 迭代器 for v in its: print(v) # 不可变集合 # 不能增删改 # 查 # 1. 通过 for in 进行遍历 # 2. 通过迭代器进行访问 # 集合之间操作 # 交集 # intersection(Iterable) # 字符串 # 只判定字符串中的非数字 # 列表 # 元组 # 字典 # 值判定key # 集合 # ... # 逻辑与 ‘&‘ # intersection_update(…) # 交集计算完毕后, 会再次赋值给原对象 # 会更改原对象 # 所以, 只适用于可变集合 s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6} result = s1.intersection(s2) print(result , type(result)) #{4, 5} <class ‘set‘> result = s1 & s2 print(result , type(result)) #{4, 5} <class ‘set‘> # 并集 # union() # 返回并集 # 逻辑或 ‘|‘ # 返回并集 # update() # 更新并集 # 差集 # difference() # 算术运算符减 ‘-‘ # difference_update() # 判定 # isdisjoint()两个集合不相交 # issuperset()一个集合包含另一个集合 # issubset()一个集合包含于另一个集合 # 注意 # 可变与不可变集合混合运算, 返回结果类型以运算符左侧为主