Python语法之集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python语法之集合相关的知识,希望对你有一定的参考价值。

集合是无序元素的集合,集合中的元素不可重复,并且创建完成后,其中的元素不可更改。但是整个集合是可以更改的,我们可以向其增加元素,也可以从中删除元素。也就是说,我们无法修改集合中的元素,但是我们可以对整个集合进行添加或者是删除等更改的操作。

集合的创建非常简单,只需要将以逗号分隔的元素放在花括号 ​​​​​ 中,​​元素1,元素2,元素3,...,元素n​​。

1.集合的创建

不知道大家是否有个武侠梦呢,我从小就喜欢看武侠小说,以及根据小说改编的各种电视剧,最爱的就是气度翩翩的赵敏,黎姿版的赵敏真的是一眸一笑深入人心…

我们来创建一个名为 novels 的集合,集合中的元素为武侠小说的名称,让我们在集合的世界里畅游武侠江湖!

novels = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels)

集合中的元素不可重复,如果有重复元素,重复的元素将被忽略。

novels = 飞狐外传, 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels)

集合中有两个元素 ​​飞狐外传​​​,但是打印的集合中,只显示一个飞狐外传,集合中的第二个元素 ​​飞狐外传​​ 被认定为是重复元素,被忽略,没有显示。

2.集合的访问

在介绍集合时,提到了集合中的元素是无序的!(列表、元组都是有序的)

元素的顺序主要应用在索引中,集合中的元素是无序的,也就无法应用索引进行访问了。

那么访问集合中的元素可以通过哪些方式呢?

我们可以通过 ​​for​​​ 循环来遍历集合的元素,另外,还可以使用 ​​in​​ 关键字来判断集合中是否存在某个元素。

我们首先来看通过 ​​for​​ 循环遍历集合的元素。

2.1 for循环

novels = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

for novel in novels:
print(novel)

2.2 in

使用 ​​in​​​ 关键字来判断集合中是否存在某个元素,如果元素在集合内,返回 ​​True​​​,如果元素不在集合内,返回 ​​False​​,运行下方语句:

novels = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(鸳鸯刀 in novels)
print(越女剑 in

3.集合的修改

可以对整个集合进行一些修改。

3.1 add() and update()

​add()​​​ 和 ​​update()​​ 都可用于向集合添加元素。

语法规则为:​​集合名.add(元素名)​​​、​​集合名.update(元素1,元素2,...,元素n)​

我们看到 ​​add()​​​ 和 ​​update()​​​ 的一个区别是 ​​add()​​​ 添加的是一个元素;​​update()​​ 添加的是集合或者是列表,添加的是多个元素。

novels = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记

novels.add(笑傲江湖)
print(novels)
novels.add(书剑恩仇录)
print(novels)
novels.add(神雕侠侣)
print(novels)

novels.update(侠客行, 倚天屠龙记) # update 的参数为集合
print(novels)
novels.update([碧血剑, 鸳鸯刀])
print(novels) # update 的参数为列表

执行 ​​add()​​​ 和 ​​update()​​ 的语句后,在集合结尾处添加了相应的元素。

3.2 discard() and remove()

除了可以对整个集合添加元素,我们还可以删除集合中的元素。

​discard()​​​ 和 ​​remove()​​ 用于从集合中删除元素。

语法规则为:​​集合名.discard()​​​、​​集合名.remove()​​​。这两个函数的区别在于,从集合中删除一个不存在的元素时,​​discard()​​​ 不会执行任何操作,而 ​​remove()​​ 会抛出一个异常。

3.2.1 删除存在的元素

首先看一下删除存在的元素,​​discard()​​​ 和 ​​remove()​​的使用是一样的,结果也是一样的。

novels = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

novels.discard(飞狐外传)
print(novels)
novels.remove(雪山飞狐)
print(novels)
3.2.2 删除不存在的元素

对于删除不存在的元素,​​discard()​​​ 不会执行任何操作,而 ​​remove()​​ 会抛出一个异常。

大家在删除集合中的元素时,要灵活掌握这些方法!

4.集合的操作

在数学中,也学习到了集合的相关概念,在数学中,我们可以对集合进行一系列的操作,比如并集、交集和差集。Python 中的集合,我们也可以做相应的操作,实现 Python 集合的并集、交集和差集。

我们先一起来看下 Python 中集合的并集:

4.1 并集

在数学中,关于并集的定义是:给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合 A 与集合 B 的并集,记作 A∪B,读作 A 并 B。

Python 中的并集也是一个含义,将集合 A 和集合 B 的所有元素合并在一起,就组成了集合 A 和集合 B 的并集。Python 中,实现集合并集可以使用 ​​union()​​​ 和 ​​|​​ 操作符。

Python语法之集合_python

4.1.1 union()

我们先来看下使用 ​​union()​​​ 实现集合的并集,语法规则为:​​集合1.union(集合2)​​,运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1.union(novels_2))
print(novels_2.union(novels_1))
4.1.2 |

也可以使用 ​​|​​​ 对两个集合进行并集的运算,语法规则为 ​​集合1|集合2​​,运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1 | novels_2)

4.2 交集

继续一起来看交集:

A,B 是两个集合,由所有属于集合 A 且属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的交集(intersection),记作 A∩B。我们使用 ​​intersection()​​​ 和 ​​&​​ 实现不同集合间的交集。

Python语法之集合_并集_02

4.2.1 intersection()

可以实现集合 A 和集合 B 的交集运算,语法规则是 ​​集合1.intersection(集合2)​​,运行下方语句 :

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1.intersection(novels_2))
print(novels_2.intersection(novels_1))
4.2.2 &

​&​​​ 也可以实现集合 A 和集合 B 的交集运算,语法规则是 ​​集合1 & 集合2​​,运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1 & novels_2)

4.3 差集

集合 A 和集合 B 中,只属于其中一个集合,不属于另一个集合的元素。比如属于集合 A 不属于集合 B 的元素集合,或者是属于集合 B 不属于集合 A 的元素集合。

Python语法之集合_并集_03

4.3.1 difference()

可以使用 ​​difference()​​​ 来实现差集的运算,语法规则为​​集合1.difference(集合2)​​:即实现属于集合 1 不属于集合 2 的差集,我们一起运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1.difference(novels_2))
print(novels_2.difference(novels_1))

当集合 novels_1 在 ​​difference()​​​ 之前时,打印的是属于集合 novels_1 不属于集合 novels_2 的元素集合,集合 novels_2 在 ​​difference()​​ 之前时,打印的是属于集合 novels_2 不属于集合 novels_1 的元素集合。

4.3.2 -

我们可以使用​​-​​​来实现差集的运算,语法规则为 ​​集合1-集合2​​:即实现属于集合 1 不属于集合 2 的差集,我们一起运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1 - novels_2)
print(novels_2 - novels_1)

4.4 对称差集

对称差集就是属于集合 A,不属于集合 B 的以及属于集合 B 不属于集合 A 的元素集合,就是集合 A 与集合 B 的并集减去集合 A 与集合 B 的交集。

Python语法之集合_python_04

4.4.1 symmetric_difference()

我们可以使用 ​​symmetric_difference()​​​ 来实现对称差集的运算,语法规则是:​​集合1.symmetric_difference(集合2)​​,一起来运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1.symmetric_difference(novels_2))
print(novels_2.symmetric_difference(novels_1))
4.4.2 ^

我们可以使用 ​​^​​​ 来实现对称差集的运算,语法规则是:​​集合1^集合2​​,一起来运行下方语句:

novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖
novels_2 = 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀

print(novels_1 ^ novels_2)
print(novels_2 ^ novels_1)

5.试一试

求集合 ​​novels_1 = 飞狐外传, 雪山飞狐, 连城诀, 天龙八部, 射雕英雄传, 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录​​​和​​novels_2 = 白马啸西风, 鹿鼎记, 笑傲江湖, 书剑恩仇录, 神雕侠侣, 侠客行, 倚天屠龙记, 碧血剑, 鸳鸯刀​​的并集,交集,差集和对称差集。

以上是关于Python语法之集合的主要内容,如果未能解决你的问题,请参考以下文章

Python语法之集合

python基础语法---数据类型之集合类型

Unity3D Shader编程之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色光照与材质

浅墨Unity3D Shader编程之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色光照与材质

[Python系列-5]:Python之人工智能 - 基本语法-2- 类复合数据类型容器(列表集合元组字典)

书剑恩仇录online全套源代码(服务端+client+文档)