Python3的set类型
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 函数删除成员是从内存中第一个成员依次删除。注意:Python解释器版本不同,分配内存的顺序不一定相同,也有的解释器每次执行时分配的内存分配的顺序也不同。
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 进行交集和并集运算。
评论列表