集合是什么
有时我们只关心「有哪些不一样的」,不在乎重复、不在乎顺序。比如「这次参加的都有谁」。集合就是这样一个「自动去重、不讲顺序」的容器。
用「不装重复东西的袋子」理解:扔进一个已经有的,它会自动消失,袋子里永远每样只有一份。
创建与自动去重
用花括号 {}(里面放单个元素,不是键:值对)或 set() 创建。最有用的本事是去重:
a = [1, 2, 2, 3, 3, 3]
set(a) # {1, 2, 3},重复的自动删掉
{1, 1, 2} # {1, 2},直接写也去重注意:空集合要写 set(),写 {} 是空字典。
in 查找极快
查在不在用 x in 集合,和列表写法一样,但快得多。列表得从头一个个找;集合像有索引目录,一下子就知道在不在。数据一多,速度差距非常明显。
s = {1, 2, 3}
2 in s # True,极快
s.add(5) # 加元素;加已有的不报错也不重复「既要去重、又要频繁查在不在」时,集合是最佳选择。
交集 / 并集 / 差集
集合能像数学那样做运算。设 A={1,2,3}、B={2,3,4}:
A & B # 交集,都有的:{2, 3}
A | B # 并集,合起来:{1, 2, 3, 4}
A - B # 差集,A有B没有:{1}记牢三个符号:& 取都有的、| 取全部的、- 取这边独有的。求「共同好友 / 全部参与者 / 只在某一边的」用它最顺。
集合 vs 列表
列表保留顺序、允许重复、能按下标取;集合无序、自动去重、不能按下标取。当你只关心有哪些不重复的、还想快速判断在不在时用集合;需要顺序或重复时用列表。常见组合:先用 set 去重,再 list() 转回列表用。