Python 中有一个数据结构叫 set,set 和 dict 类似,也是一组 key
的集合,但不存储 value。
由于 key 不能重复,所以在 set 中没有重复的成员。
set 定义
set 的定义需要提供一个 list 作为输入集合。
myset = set([1, False, "老鸟python"])
print(myset)
set 中成员的特性和 dict 成员的 key 一样,必须是可以 hash 的。
myset = set([1, [1, 2], "老鸟python"]) # 错误,成员 [1, 2] 不可 hash
print(myset)
set 中成员重复的话,只有一个起作用,这和 dict 的 key 一样。
myset = set([1, 1, "老鸟python"])
print(myset # set([1, '老鸟python']))
set 是无序的,不可以通过下标访问。
myset = set([1, 1, "老鸟python"])
print(myset[0]) # 错误
set 内部的数据结构是 hash 表,所以定义完成后,set 内部成员的存储顺序不一定是初始化的顺序。
myset = set(["a", "b", "c"])
print(myset # set(['a', 'c', 'b']))
set 的常用函数
通过 set 提供的 add 函数可以添加成员到 set 中。
myset = set(["a", "b", "c"])
myset.add("d")
print(myset)
通过 set 提供的 remove
函数可以删除成员,但如果删除的成员不存在,python 会抛出异常;set 还有一个 discard
函数也可以删除成员,并且会自动处理异常。
myset = set(["a", "b", "c"])
myset.remove("b")
print(myset)
myset.remove("d") # 抛出异常
myset.discard("d") # 不做任何处理
set 的 pop 函数从集合中移除成员,并返回移除的成员,pop 函数删除成员是从内存中第一个成员依次删除。
myset = set(["a", "b", "c"])
print(myset # set(['a', 'c', 'b']))
myset.pop()
print(myset # set(['c', 'b']))
myset.pop()
print(myset # set(['b']))
注意事项:set 是无序集合,所以不能通过下标访问 set 成员,set 里面的成员和 dict 的 key
一样,而无 dict 的 value,所以 set 的成员无法通过 set[] 来获取成员。
set 交集和并集运算
set 可以看成数学意义上的无序和无重复元素的集合,因此,两个 set 可以做数学意义上的交集,并集等操作。
myset_one = set([1, 2, 3, 4])
myset_two = set([2, 4, 6, 8])
myset_three = myset_one & myset_two
myset_four = myset_one | myset_two
print(myset_three # set([2, 4]))
print(myset_four # set([1, 2, 3, 4, 6, 8]))
本节重要知识点
set 的定义和函数使用。
set 进行交集和并集运算。
作业
运行一下程序,看看结果,想想为什么?
myset_one = set([1, True, None, False, 0])
print(myset_one)