1.2.5 集合

集合更像是不会有重复元素的数组,但它的本质是以元素的哈希值作为 Key,从而实现去重的逻辑。因此,集合也可以推导,不过得用字典的语法:

a = [1,2,3,4,5,4,3,2,1]
d = {i for i in a if i < 5}
# d = {1, 2, 3, 4},注意这里的大括号

回忆一下,二进制逻辑运算一共有三个运算符,按位或 |,按位与 & 和异或 ^,这三个运算符也可以用在集合之间,而且含义变化不大。比如:

a = {1, 2, 3}
b = {3, 4, 5}
c = a | b
# c = {1, 2, 3, 4, 5}

这里的 | 运算表示并集,也就是 c 中的任意元素,要么在 a,要么在 b 集合中。类似的,按位与 & 运算求的就是交集:

a = {1, 2, 3}
b = {3, 4, 5}
c = a & b
# c = {3}

而异或则表示那些只在 a 不在 b 或者只在 b 不在 a 的元素。或者换个说法,表示那些在集合 a 和 b 中出现了且仅出现了一次的元素:

a = {1, 2, 3}
b = {3, 4, 5}
c = a ^ b
# c = {1, 2, 4, 5}

还有一个差集运算 -,表示在集合 a 中但不在集合 b 中的元素:

a = {1, 2, 3}
b = {3, 4, 5}
c = a - b
# c = {1, 2}

回忆一下韦恩图,就会得到以下公式(虽然并没有什么卵用):

A | B = (A ^ B) | (A & B) A ^ B = (A - B) | (B - A)

Last updated