本篇介绍Python集合数据类型。集合不同于列表和元组类型,集合存储的元素是无序且不能重复的,同数学中的集合一样,集合可以执行集合的并、交、差运算。通过本篇的学习,可以达成如下目标。
● 掌握集合数据类型
● 在程序中使用集合数据类型
在数学概念中,集合是由一个或多个确定的元素构成的整体。具体来说是指具有某种特定性质、具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素或成员。例如,在整数集合中,数值…、-1、0、1、2…是整数集合的元素。
在Python语言中,集合存储的元素无序且不能重复,因此可以做字典的键。集合有两种不同的类型,可变集合和不可变集合,可变集合可以添加或删除元素,但可变集合所存储的元素不能被哈希,因此不能用做字典的键;不可变集合不能添加或删除元素,但元素是可哈希的,可以做字典的键。
1、 集合的声明和赋值
集合必须用Python提供的工厂函数来声明,可变集合使用set函数,不可变集合使用frozenset函数。
例1:集合声明和赋值
#声明可变集合
s = set('this');
print(s);
#集合中不能包含重复的元素
s1 = set('Java');
print(s1);
#使用列表初始化集合
s2 = set(['java','Python','PHP','C++']);
print(s2);
#声明不可变集合
s3 = frozenset(['变量','赋值','类','成员']);
print(s3);例1输出结果如下图所示。
从上面的输出结果可以看出,集合会把传入的字符串拆分为单个字符作为集合的成员,当传入列表时,集合会把列表内的元素作为集合成员。从输出结果还可以看出,集合不允许有重复的元素,例中s1声明时传入了“Java”字符串,但集合成员只有{‘j’,’a’,’v’},重复的a被删除。
2、 集合的访问
集合存储的元素是无序且不重复的,因此不能像列表、元组一样通过索引访问集合存储的元素。对集合元素的访问可以使用成员操作符in或not in来判断某元素是否在集合中。
例2:用成员操作符访问集合元素
#声明可变集合
s = set('this');
print(s);
#判断字符t是否在集合s中
print('t' in s);
#判断this是否在集合s中
print('this' in s);
#使用列表初始化集合
s1 = set(['java','Python','PHP','C++']);
print(s1);
#判断MySql不在集合中
print('java' not in s1);例2输出结果如下图所示。

可以使用for循环遍历集合的元素,在遍历过程中,元素的显示顺序可能和加入的元素顺序不一致。
例3:遍历集合
#声明可变集合
s = set('this');
#遍历集合s
for element in s:
print(element,end=",")
#集合中不能包含重复的元素
s1 = set('Java');
#遍历集合s1
print("");
for element in s1:
print(element,end=",")
#使用列表初始化集合
s2 = set(['java','Python','PHP','C++']);
#遍历集合s2
print('');
for element in s2:
print(element,end=",")例3输出结果如下图所示。

3、 集合的更新
集合内置了add、update、remove方法用于集合元素的添加、更新及移除操作。另外也可以通过操作符“-=”从集合中删除子集合。集合更新操作只适用于通过set创建的可变集合。
add方法用于添加一个集合成员;remove方法用于删除一个集合成员;update用于从已存在的集合中添加一个或多个成员;操作符“-=”用于删除集合中的子集合。
例4:集合更新
#声明可变集合
s = set(['变量','赋值','类','成员']);
print(s);
#添加一个集合成员
print("**添加集合成员‘语句’**")
s.add('语句');
print(s);
#删除一个集合成员
print("**删除集合成员‘赋值’**")
s.remove('赋值');
print(s);
#声明一个新的集合
s1 = set(['接口','API']);
#集合s合并集合s1
print("**集合s合并集合s1**")
s.update(s1)
print(s);
#s集合使用操作符‘-=’删除集合s1
print("**s集合使用操作符‘-=’删除集合s1**")
s -= s1;
print(s);例4输出结果如下图所示。

4、 集合的运算
Python语言的集合类型同数学集合类型一样,也有求集合的并集、交集、差集、对称差集运算。
集合的并集运算是把两个集合合并成一个新的集合,集合合并后重复的成员被删除。在Python语言中,使用符号‘|’或union函数可以执行集合的合并运算。
集合的交集运算是求两个集合的共有成员,两个集合执行交集运算后返回新的集合,该集合中的每个元素同时是两个集合中的成员。在Python语言中,使用符号‘&’或intersection函数可以执行集合的交集运算。
集合的差集运算是求A集合与B集合之间的差值,A集合与B集合执行差集运算后返回新的集合,该集合的元素,只属于集合A,而不属于集合B。在Python语言中,使用符号‘-’或difference函数可以执行集合的差集运算。
集合的对称差集运算是集合的异或运算,A集合与B集合执行对称差集运算后返回新的集合,该集合中的元素只能是属于A集合或B集合的成员,不能同时属于A和B集合。在Python语言中,使用符号‘^’或symmetric_difference函数可以执行集合的对称差集运算。
例5:集合运算
#声明s1集合
s1 = set(['变量','赋值','类','成员']);
print(s1);
#声明s2集合
s2 = set(['变量','赋值','接口','API']);
print(s2);
#求s1和s2的并集
print('**求s1和s2的并集**');
A = s1 | s2;
print(A);
#求s1和s2的交集
print('**求s1和s2的交集**');
B = s1 & s2
print(B);
#求s1和s2的差集
print('**求s1和s2的差集**');
C = s1 - s2
print(C);
#求s1和s2的差分
print('**求s1和s2的差分**');
D = s1 ^ s2
print(D);例5输出结果如下图所示。

5、 集合常用的内置方法
前面已介绍了一些有关集合操作的函数和内置方法。下面对一些常用的内置方法做个小结。
表格1 适用于所有集合的内置方法

表格 2 适用于可变集合的内置方法

6、 Python用于操作集合的函数
Python提供的set、frozenset、len函数可用于集合的声明、返回集合成员个数。
表格 3 Python用于操作集合的函数

课程小结
在Python语言中,集合存储的元素无序且不能重复。集合有两种不同的类型,可变集合和不可变集合,可变集合可以添加或删除元素;不可变集合不能被修改。集合必须用Python提供的工厂函数来声明,可变集合使用set函数,不可变集合使用frozenset函数。
集合不能像列表、元组一样通过索引访问集合存储的元素,对集合元素的访问只能使用成员操作符in或not in来判断某元素是否在集合中。集合内置了add、update、remove方法用于集合元素的添加、更新及移除操作。另外也可以通过操作符“-=”从集合中删除子集合。集合更新操作只适用于通过set创建的可变集合。
Python语言的集合类型同数学集合类型一样,也有求集合的并集、交集、差集、对称差集运算。