集合是一种无序且不重复的数据结构,可以动态地增删元素。
创建集合
集合用大括号{ }表示:
fruit = {'apple','orange','pear','banana'}
创建空集合可以用set(),但不可用{ }。{ }表示创建空字典。set()还可以将其它序列,比如列表和元组转换成集合。
集合与列表最大的差异就是集合中不会出现重复的元素。因此,即使创建集合时所给的值有重复,或者所用的列表或元组中有重复,得到的集合都不会有重复的元素。
如输入
fruit = {'apple','orange','apple','pear','orange','banana'}
得到的fruit是
{'apple','orange','pear','banana'}
集合的访问与操作
集合的常见操作和访问操作函数如下:
设s = {2,3,5,7,11}
函数 | 示例 | 结果 | 说明 |
---|---|---|---|
len() | len(s) | 5 | 返回集合中元素的数量 |
min() | min(s) | 2 | 返回集合中最小的元素 |
max() | max(s) | 11 | 返回集合中最大的元素 |
sum() | sum(s) | 28 | 返回集合中最大的元素 |
add() | s.add(13) | {2,3,5,7,11,13} | 将一个元素加入集合中 |
remove() | s.remove(3) | {2,5,7,11} | 从集合删除一个元素,若不存在,则抛出KeyError异常 |
虽然集合是无序的,但仍可以用for循环历遍集合中的每个元素:
for i in s:
print(i)
2
3
4
7
11
元素、子集、超集和相等的判断
与序列类似,可以用in和not in判断某个元素是否再集合中。
s = {2,3,5,7,11}
5 in s
True
此外,还可以判断两个集合的关系。可以用方法,也可以直接用运算符。
s1 = {2,3,5,7}
s2 = {1,2,3,4,5,6,7}
print(s1.issubset(s2)) #子集
True
print(s1<s2) #子集
True
print(s2.issuperset(s1)) #超集
True
print(s1>s2) #超集
s3 = {5,7,3,2}
print(s1==s3)
True
集合的运算
集合可以进行:并集、交集、差集和对称差集的运算,这些运算可以用方法,也可以直接用运算符。这些运算都产生新的集合而不会对原来集合产生任何修改。
运算 | 方法 | 运算符 |
---|---|---|
并集 | union() | | |
交集 | intersection() | & |
差集 | difference() | - |
对称差集 | symmetric_difference() | ^ |
对称差集是指两者共同元素以外的所有元素。