这篇文章讲的是Python的集合set类型
set集合简介
集合是一个无序的(类似无序的还有字典),不重复的数据集合。其基本功能包括下面两种:
- 去重:把一个还有重复元素的列表或元组等数据类型转变成集合,其中的重复元素只出现一次。使用set()方法。
- 进行关系测试:测试两组数据之间的交集,差集,并集等数据关系。
1. 创建集合set——去重
可以使用大括号{}或者set()函数创建集合。注意:创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典
student ={ 'Jack', 'Jim', 'Mary', 'Tom', 'Tom', 'Rose'}
print( student) #输出集合,重复的元素被自动去掉
以上实例输出结果为:
{ 'Jack', 'Rose', 'Mary', 'Jim', 'Tom'}
2.集合运算
2.1 交集
两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。使用 & 操作符执行交集操作,也可使用方法 intersection() 。
a = set('12345')
b = set('45678')
print(a&b)
print(a.intersection(b))
结果:
{‘4’, ‘5’}
{‘4’, ‘5’}
2.2 差集
A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合。使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。
a = set('12345')
b = set('45678')
print(a-b)
print(a.difference(b))
结果:
{‘2’, ‘3’, ‘1’}
{‘2’, ‘3’, ‘1’}
2.3 并集
一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。
a = set('12345')
b = set('45678')
print(a|b)
print(a.union(b))
结果:
{‘8’, ‘7’, ‘3’, ‘5’, ‘2’, ‘1’, ‘4’, ‘6’}
{‘8’, ‘7’, ‘3’, ‘5’, ‘2’, ‘1’, ‘4’, ‘6’}
2.4对差集
两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。
a = set('12345')
b = set('45678')
print(a^b)
print(a.symmetric_difference(b))
结果:
{‘2’, ‘8’, ‘1’, ‘3’, ‘7’, ‘6’}
{‘2’, ‘8’, ‘1’, ‘3’, ‘7’, ‘6’}
3. 集合内置函数和方法
函数 | 描述 |
---|---|
all() | 内置函数:如果集合中的所有元素都是 True(或者集合为空),则返回 True。 |
any() | 内置函数:如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。 |
enumerate() | 内置函数:返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。 |
len() | 内置函数:返回集合的长度(元素个数) |
max() | 内置函数:返回集合中的最大项 |
min() | 内置函数:返回集合中的最小项 |
sorted() | 内置函数:从集合中的元素返回新的排序列表(不排序集合本身) |
sum() | 内置函数:返回集合的所有元素之和 |
add() | 向集合中添加元素 |
clear | 清空集合 |
pop | 删除并返回任意的集合元素(如果集合为空,会引发 KeyError) |
remove | 删除并返回任意的集合元素(如果集合为空,会引发 KeyError) |
intersection | 将两个集合的交集作为一个新集合返回 |
union | 将集合的并集作为一个新集合返回 |
difference | 将两个或多个集合的差集作为一个新集合返回 |
symmetric_difference | 将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留) |
update | 用自己和另一个的并集来更新这个集合 |
isdisjoint() | 如果两个集合有一个空交集,返回 True |
issubset() | 如果另一个集合包含这个集合,返回 True |
issuperset() | 如果这个集合包含另一个集合,返回 True |