集合结构
集合的简介— “总有一天,你的苦会照亮你走的路”
集合是 Python 中的一种无序、可变、不重复的数据类型,它很重要的一个特点就是里面的元素 不可以重复,所以集合在处理需要唯一元素的数据时非常有用。
集合和数学中的集合概念基本一致,可以进行并集、交集、差集等数学操作。
在 Python 中,集合的写法是两侧是一对花括号 { } ,元素用逗号隔开,具体的结构如下:
集合和列表、字典、元组等数据结构一样,可以包含各种静态数据类型,来看个例子:
# 创建一个数字类型的集合
1
,2
,3
,4
,5
}# 创建一个字符类型的集合
'苹果'
,'香蕉'
,'橘子'
}# 创建一个混合类型的集合
5
, '牧旗教程'
, True
, 3.14159
}要注意,集合无法存储可变的数据结构,比如字典、列表、集合,否则程序会抛出异常报错。
集合具有以下几个重要的特点:
特点 | 描述 |
---|---|
唯一性 | 集合中的元素是唯一的,不允许重复出现。 |
无序性 | 集合中的元素没有固定的顺序,无法像列表一样通过索引访问。 |
高效性 | 集合特别适用处理大量唯一元素的情况。 |
由于集合的元素的唯一性,所以常常用来进行去重操作,来看几个例子:
我有一个含有重复元素的列表,想对其进行去重操作
# 我的列表
1
,1
,3
,3
,5
,5
,6
,8
,8
]# 将列表转换成集合再转化为列表
list
(set
(my_list))# 输出结果
print
(result)结果如下,可见列表中的元素均被去重:
[1, 3, 5, 6, 8]
集合的操作
在 Python 中对于集合有如下的操作方式:
方式 | 描述 |
---|---|
集合的访问 | 不能使用索引提取元素,只能通过循环来访问数据。 |
集合新增元素 | 可以使用 add 函数 或者 update 函数来向集合里新增元素。 |
集合删除元素 | 可以使用 remove 函数 或者 discard 函数来删除集合中的元素。 |
接下来我将通过一些示例,帮助大家依次掌握集合的操作方式:
-
集合的访问
在前面提到过,因为集合是没有固定的顺序的,所以不能像列表那样使用下标访问元素。
在 Python 中访问集合最常用的方法是使用循环结构将集合中的数据读取出来:
my_set = {'牧旗'
,'教程'
,'详细'
,'专业'
}for
elementin
my_set :print
(element)输出结果如下:
牧旗
教程
详细
专业 -
集合新增元素
向集合中新增元素可以直接使用 add 函数 或者 update 函数来实现。
add 函数可以一次向集合中新增一个元素, update 函数可以一次新增多个元素,要注意,update 函数新增的多个元素要用列表的形式呈现,来看个例子:
# 使用 add 函数向集合中新增一个元素
my_set1 = {'牧旗教程'
,'面向小白'
}my_set1.add('靠谱'
)print
(my_set1)# 使用 update 函数向集合中新增多个元素
my_set2 = {'牧旗教程'
,'面向小白'
}my_set2.update(['详细'
,'免费'
])print
(my_set2)结果如下,可以看出 set1 和 set2 的元素均得到了新增:
{'靠谱', '牧旗教程', '面向小白'}
{'免费', '牧旗教程', '详细', '面向小白'} -
集合删除元素
在集合中删除元素,需要用到 remove 函数 或者 discard 函数来完成,这两种方法的区别在于,如果要删除的元素不存在于集合中,remove 方法会引发报错,而 discard 方法则不会产生报错异常。
来看个例子方便理解:
# 使用 remove 函数删除集合元素
my_set1 = {'牧旗教程'
,'Python'
,'Java'
}my_set1.remove('Java'
)# 如果 Java 元素没有在集合中,程序会报错
print
(my_set1)# 使用 discard 函数删除集合元素
my_set2 = {'苹果'
,'香蕉'
,'葡萄'
}my_set2.discard('香蕉'
)# 无论香蕉是否在列表中程序都不会报错
print
(my_set2)运行上面的代码,结果如下,可以看出里面的对应元素均被删除:
{'牧旗教程', 'Python'}
{'葡萄', '苹果'}另外,如果想清空整个集合,可以使用 clear 函数来实现。
my_set = {'牧旗教程'
,'详细'
,'专业'
}my_set.clear()print
(my_set)此时运行代码后会输出空的集合,代表集合里没有任何元素。
集合的数学运算
集合的数学运算是指在数学中对集合进行操作和组合的过程。这些操作包括并集、交集、差集和对称差集等。通过这些运算,我们可以从给定的集合中提取出特定的元素组合或满足特定条件的元素。
方式 | 描述 |
---|---|
集合的并集 | 并集是指将两个或多个集合中的所有元素合并在一起,形成一个新的集合。 |
集合的交集 | 交集是指两个或多个集合中共有的元素组成的新集合。 |
集合的差集 | 差集是指从一个集合中减去与另一个集合相同的元素,得到的新集合。 |
集合的对称差集 | 对称差集是指两个集合中不共有的元素组成的新集合。 |
下面我将结合示例来对集合的运算依次做出详细的说明和讲解:
-
集合的并集
并集是 将多个集合合并到一个集合中 。最终生成的集合结果包含这些几个集合的全部元素。来看示意图:
图中阴影部部分是集合 A 和集合 B 并集后的总集合,在 Python 中使用 union 方法或者使用 | 符号来完成:
A = {1
,2
,3
,4
}B = {3
,4
,5
,6
}# 下面两种方式相同,都是取并集
result = A | Bresult = A.union(B)print
(result)运行上面代码,结果如下,可以看出 result 结果中包含了两个集合的全部元素:
{1, 2, 3, 4, 5, 6}
-
集合的交集
交集是找到 两个或多个集合中共同存在的元素 。
图中阴影部部分是集合 A 和集合 B 交集后的集合,也就是两个集合的共同部分,在 Python 中使用 intersection 方法或者使用 & 符号来完成:
A = {1
,2
,3
,4
}B = {3
,4
,5
,6
}# 下面两种方式相同,都是取交集
result = A & Bresult = A.intersection(B)print
(result)运行上面代码,结果如下,可以看出 result 结果中包含了两个集合中共有的元素:
{3, 4}
-
集合的差集
差集是指从 一个集合中删除另一个集合中存在的元素 。可以理解为包含了存在于第一个集合中但不存在于第二个集合中的元素。
图中阴影部部分是集合 A 差掉集合 B 后的集合,在 Python 中使用 difference 方法或者使用 - 减号运算符来完成:
A = {1
,2
,3
,4
}B = {3
,4
,5
,6
}# 下面两种方式相同,都是取差集
result = A - Bresult = A.difference(B)print
(result)运行上面代码,结果如下,可以看出 result 结果中是 A 中有且 B 中没有的元素。
{1, 2}
-
集合的对称差集
对称差集是指 两个集合中不重叠的元素的集合 。可以理解为结果集包含在两个集合的并集中,但是不在两个集合的交集中,这么看有一点绕口,来看示意图方便理解:
图中空白部分是集合 A 和集合 B 的重叠部分,对称差集是选取除了这个重叠部分外的其他元素,在 Python 中使用 symmetric_difference 方法或者使用 ^ 符号来完成:
A = {1
,2
,3
,4
}B = {3
,4
,5
,6
}# 下面两种方式相同,都是取对称差集
result = A ^ Bresult = A.symmetric_difference(B)print
(result)运行上面代码,结果如下:
{1, 2, 5, 6}
例题
请编写一段 Python 代码,来计算 Hello World 字符串和 I enjoy reading 字符串中是否有共同的字母。如果有的话将这些字母输出出来。
想要判断两个字符串是否有共同的字母,首先对各自字符串进行去重操作,找到每个字符串中存在的所有字母,然后再对去重后的内容取交集来判断。
需要注意的是,两段话中都有空格,空格不是字母,所以需要剔除掉。
# 先创建两个字符串对应的变量
'Hello World'
'I enjoy reading'
# 将两个字符串内的字母转化为集合
set
(str1)set
(str2)# 对两个集合取交集,并将结果和空格所在的集合取差集(剔除空格)
' '
}# 判断差集的长度,如果长度是 0 说明两者没有相同的字母
if
len
(result) == 0
:print
("两个字符串没有共同的字母"
)else
:print
("两个字符串有共同的字母,具体如下:"
)for
letter in
result:print
(letter)运行上面的程序,结果如下:
两个字符串有共同的字母,具体如下:
d
o
e
r
使用 set 函数可以将一个对象转变成集合对象,判断两个集合是否有重复的元素用到了上面提到的 集合数学运算 的方法,将重复的元素用 for 循环输出结果。
关注公众号【牧旗教程】,回复“更多例题”,获取更多题型进行训练~
您的打赏将帮助维护网站服务器的正常运营,并为作者的后续更新提供更多的动力。
Copyright © 2013-2023 Muqi Course. All Rights Reserved. 牧旗教程 版权所有 京ICP备2023029281号