站长在线零基础Python完全自学教程18:Python中的集合完全解读_并集

18.1、Python中集合的概念和创建方法详解

在前面的教程中我们学习了列表、元组、字典,本文开始讲解序列里面的另一个常用结构--集合。

18.1.1、在Python中集合的概念

Python中的集合(set)与数学中的集合概念类似,也是用于保存不重复的元素。

它有可变集合(set)和不可变集合(frozenset)两种。其中,本节所要介绍的set集合是无序可变序列。

在形式上,集合的所有元素都放在一对大括号“{}”中,两个相邻元素间使用逗号“,”分隔。集合最好的应用就是去重,因为集合中的每个元素都是唯一的。

这个和字典类似,字典也是放在“{}”中,不同的是字典在“{}”中是“键值对”,而集合中每一个元素都是独立存在的。

站长在线温馨提示:集合在数学中的定义是:由一个或多个确定的元素所构成的整体。

集合最常用的操作就是创建集合,以及集合的添加、删除、交集、并集和差集等运算,本节课开始讲解集合的创建。

18.1.2、在Python中创建集合

在Python中提供了两种创建集合的方法,一种是直接使用“{}”创建;另一种是通过set()函数将列表、元组等可迭代对象转换为集合。

注意:创建一个空集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典。如下代码所示:

a = {}
print(a)
print(type(a))

运行结果为:

{}
<class 'dict'>
>>>

18.1.2.1、在Python中直接使用“{}”创建集合。

在Python中,创建set集合也可以像列表、元组和字典一样,直接将集合赋值给变量,从而实现创建集合,即直接使用大括号“{}”创建。语法格式如下:

集合名 = {元素1,元素2,...元素n}

站长在线提示你,在集合中,元素的数量没有限制,数据的类型只要是Python中支持的数据类型都可以。

在上面我们谈到了集合的每一个元素都是唯一的,如果输入了重复的元素,Python会自动保留一个,如下:

例如,下面每一行的代码都会创建一个集合:

name = {'美琳','梦洁','雪丽','美莲'}
age = {18,19,19,18}
hunhe = {66,"Python",('人生苦短','我用Python')}
print(name)
print(age)
print(hunhe)

运行代码,结果为:

{'雪丽', '美莲', '美琳', '梦洁'}
{18, 19}
{('人生苦短', '我用Python'), 66, 'Python'}
>>>

因为在Python中的set集合是无序的,因此每次输出的结果,可能可能不同,如我第二次运行代码的结果是:

{'美琳', '梦洁', '美莲', '雪丽'}
{18, 19}
{'Python', ('人生苦短', '我用Python'), 66}
>>>

18.1.2.2、在Python中使用set()函数创建集合

在Python中,可以使用set()函数将列表、元组等其他可迭代对象转换为集合。set()函数的语法格式如下:

​setname = set(iteration)​

参数说明如下:

setname:表示集合名称;

​iter​​ation:表示要转换为集合的可迭代对象,可以是列表、元组、​​range​​对象等。另外,也可以是​​字符串​​,如果是​​字符串​​,返回的集合将是包含全部不重复字符的集合。

例如,下面的每行代码都可以创建一个集合。

set1 = set('我是中国人,我爱自己的祖国')
set2 = set([3.1415926535,99.99])
set3 = set(('Python的设计哲学','优雅','明确','简单'))
print(set1)
print(set2)
print(set3)

运行结果如下:

{'己', '的', '中', '是', '自', ',', '祖', '我', '人', '爱', '国'}
{99.99, 3.1415926535}
{'简单', '明确', 'Python的设计哲学', '优雅'}
>>>

站长在线提醒你:在Python中创建集合推荐使用set()函数添加哦!

18.2、在Python中添加和​​删除集合元素​​详解

集合是可变序列,所以在​​创建集合​​后,还可以对其添加或者​​删除元素​​。下面​​站长在线​​就对如何添加和​​删除集合元素​​进行详细解读。

18.2.1、在Python中​​添加集合元素​

18.2.1.1、在Python中向集合里面添加元素可以使用​​add​​()方法实现。

其中添加元素又分为添加单个元素和多个元素之分。

18.2.1.1.1、使用add()方法实现添加单个集合元素。

语法如下:

​setname.add(element)​

其中,setname表示要添加元素的集合;element表示要添加的元素内容。这里只能使用字符串、数字及布尔类型的True或者False等,不能使用​​列表​​、​​元组​​等可迭代对象。

如:某班有4位美女的美术成绩比较好,最近新来了一个美女的美术成绩也是比较好的,要求创建一个集合,然后向该集合添加一个名字,​​代码​​如下:

name = {'美琳','梦洁','雪丽','美莲'}
name.add('梅梅')
print(name)

运行结果如下:

{'雪丽', '梅梅', '梦洁', '美莲', '美琳'}
>>>

添加单个元素还是可以的,添加多个元素呢?我们试试下面的代码看看:

name = {'美琳','梦洁','雪丽','美莲'}
name.add(['梅梅','红红','艳艳','芳芳'])
print(name)

运行结果为:

Traceback (most recent call last):
File "D:\Python\Python310\Doc\000.py", line 2, in <module>
name.add(['梅梅','红红','艳艳','芳芳'])
TypeError: unhashable type: 'list'
>>>

翻译“TypeError: unhashable type: '​​list​​'”的结果为:TypeError:不可哈希类型:'List',意思就是不能直接添加多个元素。

但是有没有办法使用add添加多个元素呢?答案还是有的,只是麻烦一点,多费一点精力而已,拐一个弯。下面来给大家解答:

18.2.1.1.2、使用add()方法实现添加多个集合元素。

我们定义两个集合,使用add()方法,将第二个集合元素添加到第一个集合里面。

如:定义某班级上午的三节课程为一个集合,下午的三节课程为一个集合,最后输出最新的集合,代码如下:

a = {'语文','英语','数学'}
b = {'政治','历史','地理'}
for i in b:
a.add(i)
print(a)

运行结果如下:

{'语文', '数学', '英语', '政治', '地理', '历史'}
>>>

18.2.1.2、使用​​update​​()方法添加集合元素

name = {'美琳','梦洁','雪丽','美莲'}
name.update(['梅梅'])
print(name)

运行结果如下:

{'梅梅', '梦洁', '雪丽', '美琳', '美莲'}
>>>

站长在线温馨提醒您,这里使用update()方法添加集合元素,添加的元素使用“[]”而不是使用不用或者小括号哦!

使用不使用[]就会出现不是我们想要的结果,如:

name = {'美琳','梦洁','雪丽','美莲'}
name.update('梅梅')
print(name)

运行结果为:

{'雪丽', '梦洁', '美莲', '美琳', '梅'}
>>>

这里面少了一个“梅”字,应该是“梅梅”而不是“梅”

同样使用小括号也是不行的,如:

name = {'美琳','梦洁','雪丽','美莲'}
name.update(('梅梅'))
print(name)

运行结果:

{'美莲', '梅', '雪丽', '美琳', '梦洁'}
>>>

这都不是我们想要的。

当然使用使用update()方法除了可以添加一个元素以外,添加多个元素也是可以的哦!如:

name = {'美琳','梦洁','雪丽','美莲'}
name.update(['梅梅','红红','艳艳','芳芳'])
print(name)

运行结果为:

{'美琳', '红红', '梅梅', '雪丽', '芳芳', '艳艳', '梦洁', '美莲'}
>>>

所以说如果添加多个元素的话,update()方法比add()方法要简单一点。

18.2.2、在Python中删除集合元素

讲完了添加集合元素,接下来就讲解删除集合元素了。

删除集合元素的方法有4种有4种类型分别是:使用​​del​​命令删除整个集合、使用​​clear​​()方法清空集合元素、使用​​pop​​()方法删除最后一个元素、使用​​remove​​()方法删除指定元素。下面站长在线来一一给大家讲解:

18.2.2.1、使用del命令删除整个集合

name = {'美琳','梦洁','雪丽','美莲'}
del name # 删除整个集合,不能有打印操作

运行结果如下:

>>> 

18.2.2.2、使用clear()方法清空集合元素

name = {'美琳','梦洁','雪丽','美莲'}
name.clear() # 清空集合元素
print(name)

运行结果如下:

set()
>>>

18.2.2.3、使用pop()方法删除最后一个元素

name = {'美琳','梦洁','雪丽','美莲'}
name.pop() # 删除最后一个元素
print(name)

运行结果为:

{'雪丽', '美琳', '梦洁'}
>>>

18.2.2.4、使用remove()方法删除指定元素

name = {'美琳','梦洁','雪丽','美莲'}
name.remove('梦洁') # 删除指定一个元素
print(name)

运行结果为:

{'美琳', '美莲', '雪丽'}
>>>

当然,我们在删除集合元素的时候,不仅只是删除一个元素,还会删除多个元素,下面,我在介绍使用remove()方法删除多个元素。

我们直接删除多个元素看看,怎么一个效果:

a = {'语文', '数学', '英语', '政治', '地理', '历史'}
a.remove(['政治', '地理', '历史'])
print(a)

运行结果如下:

Traceback (most recent call last):
File "D:\Python\Python310\Doc\000.py", line 2, in <module>
a.remove(['政治', '地理', '历史'])
TypeError: unhashable type: 'list'
>>>

错误的结果,和上面的错误一样,但是,我还是可以找​​得到​​方法的,下面就正式介绍:

18.2.2.5、使用remove()方法删除多个元素

使用remove()方法删除多个元素,我们借鉴add添加多个元素的方法来操作,设置ab两个集合,大集合删除小集合的方法去实现,代码如下:

a = {'语文', '数学', '英语', '政治', '地理', '历史'}
b = {'政治','历史','地理'}
for i in b:
a.remove(i)
print(a)

运行结果如下:

{'语文', '英语', '数学'}
>>>

18.3、Python中集合的​​交集​​、​​并集​​、​​差集​​和​​对称差集​​运算方法详解

在Python中,集合最常用的操作就是进行交集、并集、差集和对称差集的运算。

要想学习集合的交集、并集、差集和对称差集运算方法,首先我们来了解这些名词的含义:

18.3.1、集合运算的相关含义:

18.3.1.1、集合的交集的含义:

设A、B两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集。在Python中,进行交集运算时使用“&”符号。

18.3.1.2、集合的并集的含义:

给定两个集合A、B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集。在Python中,进行并集运算时使用“|”符号。

18.3.1.3、集合的差集的含义:

设A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A与集合B的差集。在Python中,进行差集运算时使用“-”符号。

18.3.1.4、集合的对称差集的含义:

对称差集也称为对称差分或者补集,设A,B是两个集合,所有不相同的集合,叫做集合A与集合B的对称差集(对称差分或者补集)。在Python中,进行对称差集运算时使用“^”符号。

18.3.2、集合的运算方法

上面都是概念性的描述,下面​​站长在线​​来举实际的场景来对交集、并集、差集和对称差集运算方法进行深入浅出的解读。

场景模拟:某高中三年级,文科班高考的科目是语文、数学、英语、政治、历史和地理。理科班高考的科目是语文、数学、英语、物理、化学和生物。

设定集合A为文科班高考的科目,集合B为理科班高考的科目。

A = {'语文','数学','英语','政治','历史','地理'}

B = {'语文','数学','英语','物理','化学','生物'}

18.3.2.1、集合的交集运算方法

我们使用集合的交集运算的时候可以采用两种方式,一种是使用“&”运算符进行操作,另一种是使用​​intersection()​​方法来实现。

18.3.2.1.1、使用“&”运算符进行交集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A & B) # 输出集合A和集合B的交集

运行结果:

{'英语', '数学', '语文'}
>>>

18.3.2.1.2、使用​​intersection()​​方法进行交集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A.intersection(B)) # 输出集合A和集合B的交集

运行结果:

{'英语', '语文', '数学'}
>>>

同理集合B和集合A的交集也是一样。我这里就不重复了,自己去体验一下。

18.3.2.2、集合的并集运算方法

集合的并集运算也有两种方式,一种是使用“|”运算符进行操作,另一种是使用union()方法来实现。

18.3.2.2.1、使用“|”运算符进行并集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A | B) # 输出集合A和集合B的并集

运行结果如下:

{'数学', '生物', '政治', '物理', '地理', '化学', '语文', '英语', '历史'}
>>>

18.3.2.2.2、使用union()方法进行并集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A.union(B)) # 输出集合A和集合B的并集

运行结果为:

{'英语', '语文', '地理', '生物', '政治', '化学', '数学', '物理', '历史'}
>>>

同理集合B和集合A的并集也是一样。自己去体验一下吧!

18.3.2.3、集合的差集运算方法

集合的差集运算也有两种方式,一种是使用“-”运算符进行操作,另一种是使用difference()方法来实现。

18.3.2.3.1、使用“-”运算符进行差集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A - B) # 输出集合A和集合B的差集

运行结果为:

{'历史', '地理', '政治'}
>>>

上面是集合A和集合B的差集,但是集合B和集合A的差集就不是一样的了哦!

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(B - A) # 输出集合B和集合A的差集

运行结果为:

{'化学', '生物', '物理'}
>>>

从上面可以看出,集合A和集合B的差集  与  集合B和集合A的差集是不一样的,(A - B)是A中存在的部分,(B - A)是B中存在的部分。

18.3.2.3.2、使用difference()方法进行差集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A.difference(B)) # 输出集合A和集合B的差集

运行结果:

{'地理', '政治', '历史'}
>>>

同理,使用difference()方法进行集合B和集合A的差集也是不同的

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(B.difference(A)) # 输出集合B和集合A的差集

运行结果:

{'物理', '化学', '生物'}
>>>

18.3.2.4、集合的对称差集运算方法

集合的差集运算也有两种方式,一种是使用“^”运算符进行操作,另一种是使用symmetric_difference()方法来实现。

18.3.2.4.1、使用“^”运算符进行对称差集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A ^ B) # 输出集合A和集合B的对称差集

运行结果为:

{'地理', '化学', '生物', '政治', '物理', '历史'}
>>>

18.3.2.4.2、使用symmetric_difference()方法进行对称差集运算

A = {'语文','数学','英语','政治','历史','地理'}
B = {'语文','数学','英语','物理','化学','生物'}
print(A.symmetric_difference(B)) # 输出集合A和集合B的对称差集

运行结果为:

{'政治', '生物', '地理', '化学', '历史', '物理'}
>>>

同样的,集合B与集合A的对称差集也是一样,自己去体验一下。

我们对集合的交集、并集、差集和对称差集运算方法全部详细的讲解了一遍,通过运行结果,我们得出结论:

集合中进行交集、并集、对称差集进行运算的时候,集合A与集合B,位置替换的时候,结果相同。

集合中进行差集运算的时候,集合A与集合B,位置替换的时候,结果不同,为前面那个集合独立存在的部分。

下节课程预告:站长在线零基础Python完全自学教程19:字符串的系列知识详解