42.集合
resource
简介
A set 对象是distinct的无序集合 hashable 物体。常见的用途
包括成员资格测试
、从序列中删除重复项
以及计算数学运算
,如交集、并集、差分和对称差分
。(对于其他容器,请参见内置的 dict , list 和 tuple 课程,以及 collections
模块。
与其他集合一样,集合支持x in set , len(set)
和for x in set
.作为无序集合
,集合不记录元素位置或插入顺序。因此,集合不支持索引、切片或其他类似序列的行为
。
目前有两种内置的集合类型, set
和 frozenset
. 这个 set
类型是可变的—可以使用如下方法更改内容 add()
和remove()
. 因为它是可变的,所以它没有hash值
,不能用作字典键或另一个集合的元素
。
这个 frozenset
类型不可变且 hashable
—其内容创建后不能更改,因此可以用作字典键或其他集合的元素。
( 这个frozenset 下一节会讲)
集合是
无序可变
,。实际上,集合底层是元素不能重复
字典实现
,集合的所有元素都是字典 中的“键对象”
,因此是不能重复
的且唯一
的。
集合创建和删除
- 使用
{ }
创建集合对象,并使用add()
方法添加元素
>>> a = {3,5,7}
>>> a
{3, 5, 7}
>>> a.add(9)
>>> a
{9, 3, 5, 7}
- 使用
set()
,将列表、元组等可迭代对象
转成集合
。如果原来数据存在重复数据
,则只保 留一个
。
>>> a = ['a','b','c','b']
>>> b = set(a)
>>> b
{'b', 'a', 'c'}
remove()
删除指定元素;clear()
清空整个集合
>>> a = {10,20,30,40,50}
>>> a.remove(20)
>>> a
{10, 50, 30}
集合相关操作
像数学中概念一样,Python对集合也提供了
并集、交集、差集等
运算。
我们给出示例:
>>> a = {1,3,'onepis'}
>>> b = {'he','it','onepis'}
>>> a|b #并集
{1, 3, 'onepis', 'he', 'it'}
>>> a&b #交集
{'onepis'}
>>> a-b #差集
{1, 3}
>>> a.union(b) #并集
{1, 3, 'onepis', 'he', 'it'}
>>> a.intersection(b) #交集
{'onepis'}
>>> a.difference(b) #差集
{1, 3}
目前有
两种内置
的集合类型
,set
和frozenset
. 这个 set 类型是可变的—可以使用如下方法更改内容add()
和remove()
. 因为它是可变的,所以它没有hash
值,不能用作字典键
或另一个集合的元素
。这个frozenset
类型不可变且 hashable
—其内容创建后不能更改,因此可以用作字典键或其他集合的元素
。
如下 实验
aaa
是普通的 set
所以 作为 字典的键的时候 报错了。
顺便说一下关于成员测试函数 issubset
In [89]: {"a","b"}.issubset(a)
Out[89]: True
In [90]: {"a","b"}.issubset(["a","b","c"])
Out[90]: True
# {"a","b"} 这里只能是集合
# 后面 subset 传入参数 可以是 列表 集合 字典等类型
In [91]: {"a","b"}.issubset(("a","b","c"))
Out[91]: True
In [92]: {"a","b"}.issubset({"a","b","c"})
Out[92]: True
In [93]: {"a","b"}.issubset({"a":1,"b":2,"c":3})
Out[93]: True
# 当然如果 只有一个元素 我们 可以用 in
In [94]: "a" in {"a","b"}
Out[94]: True