(十一)集合:去重与关系判断
# 集合保留不同的元素,用于成员检查和去重。
tags = {"python", "web", "python"}
print(len(tags), "python" in tags)
# 空集合用 set() 创建;{} 创建的是空字典。
tags.add("data")
tags.discard("game")
print(len(tags))add 加入一项,discard 尝试移除一项,没有找到时不做修改。remove 找不到时会报 KeyError;可以用它表达“这项本应存在,缺少说明程序状态出了问题”。
# 用集合运算比较两份清单;通过成员关系核对结果。
a = {"Python", "NumPy"}
b = {"Python", "Pygame"}
common = a & b
combined = a | b
only_a = a - b
different = a ^ b
print(common == {"Python"})
print(len(combined), only_a == {"NumPy"}, len(different))分别表示交集、并集、差集和对称差。集合没有用来表达业务顺序的位置,下标访问交给列表;需要稳定的输出顺序时先排序,再输出。
只读的一组标签可以用 frozenset 保存。它不可变,可以用作字典键或其他集合的元素。选择工具时,先看任务要保留什么:阅读发生顺序用列表,书名到分钟数的关系用字典,只关心是否出现过用集合。
这里的 &、|、^ 操作集合成员;第(三)节中同样的符号操作整数的二进制位,字典的 | 则合并键值项。读表达式时,把操作符与两边对象的类型一起看。