集合的基本操作
集合(set)与数学中集合的概念一致,即包含0个或多个数据项的无序组合。集合中的元素不可重复;元素类型只能是固定数据类型,如整数、浮点数、字符串、元组等,不能是列表、字典和集合等可变数据类型。
tips:Python提供了一个内置函数hash()来计算对象的哈希值,凡是无法计算哈希值(调用内置函数hash()时抛出异常)的对象都不能作为集合的元素,,也不能作为字典对象的”键“。
集合的创建
1、创建集合的方式很简单,只需将逗号分隔的不同元素使用大括号括起来即可。
>>> b={1,5,2,8} # 创建集合
>>> b
{8, 1, 2, 5}
注意:集合元素是无序的,集合的打印效果与定义顺序可以不一致,且由于集合元素独一无二,使用集合类型能够过滤掉重复元素。
2、也可以使用set()函数将列表、元组等其他类型的数据转换为集合,如果原来的数据中存在重复元素,则在转换为集合时会将其删除。
>>> x = set('runoob') # 将字符串转换为集合
>>> x
{'b', 'o', 'u', 'n', 'r'}
添加与删除集合元素
与字典相似,Python也提供了多种方法和函数用于集合元素的添加和删除,如下所示:
操作函数或方法 | 描述 |
---|---|
S.add(x) | 如果数据项x不在集合S中,将x添加到S中 |
S.update(T) | 合并集合T中的元素到当前集合S中,并自动去除重复元素 |
S.pop() | 随机删除并返回集合中的一个元素,如果集合为空则抛出异常 |
S.remove() | 如果x在集合S中,移除该元素;如果x不存在则抛出异常 |
S.discard(x) | 如果x在集合S中,移除该元素;如果x不存在不报错 |
S.clear() | 清空集合 |
>>> s={1,2,3}
>>> s.add(4) # 添加元素
>>> s.update({4,5,6}) # 更新当前集合,自动忽略重复元素
>>> s
{1, 2, 3, 4, 5, 6}
>>> s.discard(5) # 删除元素,不存在则忽略该操作
>>> s
{1, 2, 3, 4, 6}
>>> s.remove(5) # 删除元素,不存在则抛出异常
KeyError: 5
>>> s.pop() # 删除并返回一个元素
1
集合运算
内置函数len()、max()、min()、sorted()等也适用于集合,另外,Python集合还支持数学意义上的交集、并集、差集、补集等运算,具体操作如下所示:
操作符 | 描述 |
---|---|
S&T | 交集,返回一个新集合,包括同时在S和T中的元素 |
S|T | 并集,返回一个新集合,包括集合S和T中的所有元素 |
S-T | 差集,返回一个新集合,包括在集合S中但不在集合T中的元素 |
S^T | 补集,返回一个新集合,包括集合S和T中的元素,但不包括同时在集合S和T中的元素 |
S<=T | 如果S与T相同或是S是T的子集,返回True;否则返回False,可以用S<T判断S是否是T的真子集 |
S>=T | 如果S与T相同或是S是T的超集,返回True;否则返回False,可以用S>T判断S是否是T的真超集 |
>>> a_set = {1,2,3,4,5}
>>> b_set = {1,2,6,7,8}
>>> a_set&b_set # 交集
{1, 2}
>>> a_set|b_set # 并集
{1, 2, 3, 4, 5, 6, 7, 8}
>>> a_set-b_set # 差集
{3, 4, 5}
>>> a_set^b_set # 补集
{3, 4, 5, 6, 7, 8}
>>>
>>> x = {1,2,3}
>>> y = {2,3}
>>> z = {1,2,4}
>>> x >= y # y是否为x的子集
True
>>> x <= z # x是否为z的子集
False
加油!努力!千万不要放弃!