Logo

郎哥编程

详解Python集合数据类型

2018-11-07 1009

本篇介绍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输出结果如下图所示。

image.png                             

从上面的输出结果可以看出,集合会把传入的字符串拆分为单个字符作为集合的成员,当传入列表时,集合会把列表内的元素作为集合成员。从输出结果还可以看出,集合不允许有重复的元素,例中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输出结果如下图所示。

image.png


可以使用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输出结果如下图所示。

image.png



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输出结果如下图所示。

image.png



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输出结果如下图所示。

image.png



5、 集合常用的内置方法


前面已介绍了一些有关集合操作的函数和内置方法。下面对一些常用的内置方法做个小结。

表格1 适用于所有集合的内置方法

image.png


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

image.png


6、 Python用于操作集合的函数


Python提供的set、frozenset、len函数可用于集合的声明、返回集合成员个数。

表格 3 Python用于操作集合的函数

image.png


课程小结

在Python语言中,集合存储的元素无序且不能重复。集合有两种不同的类型,可变集合和不可变集合,可变集合可以添加或删除元素;不可变集合不能被修改。集合必须用Python提供的工厂函数来声明,可变集合使用set函数,不可变集合使用frozenset函数。

集合不能像列表、元组一样通过索引访问集合存储的元素,对集合元素的访问只能使用成员操作符in或not in来判断某元素是否在集合中。集合内置了add、update、remove方法用于集合元素的添加、更新及移除操作。另外也可以通过操作符“-=”从集合中删除子集合。集合更新操作只适用于通过set创建的可变集合。

Python语言的集合类型同数学集合类型一样,也有求集合的并集、交集、差集、对称差集运算。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论