• #1 集合创建">#1 集合创建
  • #2 集合访问">#2 集合访问
    • #2.1 <font style="color:rgb(71, 101, 130);">for</font> 循环">#2.1 <font style="color:rgb(71, 101, 130);">for</font> 循环
    • #2.2 <font style="color:rgb(71, 101, 130);">in</font>">#2.2 <font style="color:rgb(71, 101, 130);">in</font>
  • #3 集合修改">#3 集合修改
    • #3.1 <font style="color:rgb(71, 101, 130);">add() and update()</font>">#3.1 <font style="color:rgb(71, 101, 130);">add() and update()</font>
    • #3.2 <font style="color:rgb(71, 101, 130);">discard() and remove()</font>">#3.2 <font style="color:rgb(71, 101, 130);">discard() and remove()</font>
      • #3.2.1 删除存在的元素">#3.2.1 删除存在的元素
      • #3.2.2 删除不存在的元素">#3.2.2 删除不存在的元素
  • #4 集合操作">#4 集合操作
    • #4.1 并集">#4.1 并集
      • #4.1.1 <font style="color:rgb(71, 101, 130);">union()</font>">#4.1.1 <font style="color:rgb(71, 101, 130);">union()</font>
      • #4.1.2 <font style="color:rgb(71, 101, 130);">|</font>">#4.1.2 <font style="color:rgb(71, 101, 130);">|</font>
    • #4.2 交集">#4.2 交集
      • #4.2.1 <font style="color:rgb(71, 101, 130);">intersection()</font>">#4.2.1 <font style="color:rgb(71, 101, 130);">intersection()</font>
      • #4.2.2 <font style="color:rgb(71, 101, 130);">&</font>">#4.2.2 <font style="color:rgb(71, 101, 130);">&</font>
    • #4.3 差集">#4.3 差集
      • #4.3.1 <font style="color:rgb(71, 101, 130);">difference()</font>">#4.3.1 <font style="color:rgb(71, 101, 130);">difference()</font>
      • #4.3.2 <font style="color:rgb(71, 101, 130);">-</font>">#4.3.2 <font style="color:rgb(71, 101, 130);">-</font>
    • #4.4 对称差集">#4.4 对称差集
      • #4.4.1 <font style="color:rgb(71, 101, 130);">symmetric_difference()</font>">#4.4.1 <font style="color:rgb(71, 101, 130);">symmetric_difference()</font>
      • #4.4.2 <font style="color:rgb(71, 101, 130);">^</font>">#4.4.2 <font style="color:rgb(71, 101, 130);">^</font>
  • #5 总结">#5 总结
  • #6 练习题">#6 练习题

    9集合 - 图1

    首页

    课程地图 成长学园 创意集市 高校合作 企业服务 技术服务

    学习教程

    我们先来一起复习下上一关元组的内容:

    9集合 - 图2

    今天我们来学习集合。 集合是无序元素的集合,集合中的元素不可重复,并且创建完成后,其中的元素不可更改。但是整个集合是可以更改的,我们可以向其增加元素,也可以从中删除元素。也就是说,我们无法修改集合中的元素,但是我们可以对整个集合进行添加或者是删除等更改的操作。 集合的创建非常简单,只需要将以逗号分隔的元素放在花括号 <font style="color:rgb(71, 101, 130);">{}</font> 中,<font style="color:rgb(71, 101, 130);">{元素1,元素2,元素3,...,元素n}</font>

    #1 集合创建

    不知道大家是否有个武侠梦呢,我从小就喜欢看武侠小说,以及根据小说改编的各种电视剧,最爱的就是气度翩翩的赵敏,黎姿版的赵敏真的是一眸一笑深入人心…啧啧啧,有些跑偏,还不小心暴露了年纪,我们还是回到课程中来。 现在呢,我们来创建一个名为 novels 的集合,集合中的元素为武侠小说的名称,让我们在集合的世界里畅游武侠江湖!
    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. print(novels)
    1
    2
    3 集合中的元素不可重复,如果有重复元素,重复的元素将被忽略。
    1. novels = {'飞狐外传', '飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. print(novels)
    1
    2
    3 我们看到集合中有两个元素 <font style="color:rgb(71, 101, 130);">'飞狐外传'</font>,但是打印的集合中,只显示一个飞狐外传,集合中的第二个元素 <font style="color:rgb(71, 101, 130);">'飞狐外传'</font> 被认定为是重复元素,被忽略,没有显示。

    #2 集合访问

    我们在介绍集合时,提到了集合中的元素是无序的!(列表、元组都是有序的哦) 元素的顺序主要应用在索引中,集合中的元素是无序的,也就无法应用索引进行访问了。 那么访问集合中的元素可以通过哪些方式呢? 我们可以通过 <font style="color:rgb(71, 101, 130);">for</font> 循环来遍历集合的元素,另外,还可以使用 <font style="color:rgb(71, 101, 130);">in</font> 关键字来判断集合中是否存在某个元素。 我们首先来看通过 <font style="color:rgb(71, 101, 130);">for</font> 循环遍历集合的元素。

    #2.1 <font style="color:rgb(71, 101, 130);">for</font> 循环

    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. for novel in novels:
    3. print(novel)
    1
    2
    3
    4

    #2.2 <font style="color:rgb(71, 101, 130);">in</font>

    使用 <font style="color:rgb(71, 101, 130);">in</font> 关键字来判断集合中是否存在某个元素,如果元素在集合内,返回 <font style="color:rgb(71, 101, 130);">True</font>,如果元素不在集合内,返回 <font style="color:rgb(71, 101, 130);">False</font>,运行下方语句:
    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. print('鸳鸯刀' in novels)
    3. print('越女剑' in novels)
    1
    2
    3
    4 鸳鸯刀在集合中,因此返回 <font style="color:rgb(71, 101, 130);">True</font>;越女剑不在集合中,返回 <font style="color:rgb(71, 101, 130);">False</font>

    #3 集合修改

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

    #3.1 <font style="color:rgb(71, 101, 130);">add() and update()</font>

    <font style="color:rgb(71, 101, 130);">add()</font> <font style="color:rgb(71, 101, 130);">update()</font> 都可用于向集合添加元素。

    语法规则为:<font style="color:rgb(71, 101, 130);">集合名.add(元素名)</font><font style="color:rgb(71, 101, 130);">集合名.update({元素1,元素2,...,元素n})</font> 我们看到 <font style="color:rgb(71, 101, 130);">add()</font> <font style="color:rgb(71, 101, 130);">update()</font> 的一个区别是 <font style="color:rgb(71, 101, 130);">add()</font> 添加的是一个元素;<font style="color:rgb(71, 101, 130);">update()</font> 添加的是集合或者是列表,添加的是多个元素,我们一起来运行下方语句:
    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记'}
    2. novels.add('笑傲江湖')
    3. print(novels)
    4. novels.add('书剑恩仇录')
    5. print(novels)
    6. novels.add('神雕侠侣')
    7. print(novels)
    8. novels.update({'侠客行', '倚天屠龙记'}) # update 的参数为集合
    9. print(novels)
    10. novels.update(['碧血剑', '鸳鸯刀'])
    11. print(novels) # update 的参数为列表
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13 我们看到执行 <font style="color:rgb(71, 101, 130);">add()</font> <font style="color:rgb(71, 101, 130);">update()</font> 的语句后,在集合结尾处添加了相应的元素。

    #3.2 <font style="color:rgb(71, 101, 130);">discard() and remove()</font>

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

    <font style="color:rgb(71, 101, 130);">discard()</font> <font style="color:rgb(71, 101, 130);">remove()</font> 用于从集合中删除元素。

    语法规则为:<font style="color:rgb(71, 101, 130);">集合名.discard()</font><font style="color:rgb(71, 101, 130);">集合名.remove()</font>。这两个函数的区别在于,从集合中删除一个不存在的元素时,<font style="color:rgb(71, 101, 130);">discard()</font> 不会执行任何操作,而 <font style="color:rgb(71, 101, 130);">remove()</font> 会抛出一个异常。

    #3.2.1 删除存在的元素

    我们首先看一下删除存在的元素,<font style="color:rgb(71, 101, 130);">discard()</font> <font style="color:rgb(71, 101, 130);">remove()</font>的使用是一样的,结果也是一样的,运行下方语句:
    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. novels.discard('飞狐外传')
    3. print(novels)
    4. novels.remove('雪山飞狐')
    5. print(novels)
    1
    2
    3
    4
    5
    6

    #3.2.2 删除不存在的元素

    对于删除不存在的元素,<font style="color:rgb(71, 101, 130);">discard()</font> 不会执行任何操作,而 <font style="color:rgb(71, 101, 130);">remove()</font> 会抛出一个异常,运行下方语句:
    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. novels.discard('越女剑') # 不会执行任何操作
    3. print(novels)
    1
    2
    3
    4
    1. novels = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    2. novels.remove('越女剑') # 会抛出异常
    3. print(novels)
    1
    2
    3
    4 我们看到 <font style="color:rgb(71, 101, 130);">discard()</font> 不会执行任何操作,而 <font style="color:rgb(71, 101, 130);">remove()</font> 会抛出一个异常。 大家在删除集合中的元素时,要灵活掌握这些方法哦!

    #4 集合操作

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

    #4.1 并集

    在数学中,关于并集的定义是:给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合 A 与集合 B 的并集,记作 A∪B,读作 A 并 B。 Python 中的并集也是一个含义,将集合 A 和集合 B 的所有元素合并在一起,就组成了集合 A 和集合 B 的并集。Python 中,实现集合并集可以使用 <font style="color:rgb(71, 101, 130);">union()</font> <font style="color:rgb(71, 101, 130);">|</font> 操作符。

    9集合 - 图3

    #4.1.1 <font style="color:rgb(71, 101, 130);">union()</font>

    我们先来看下使用 <font style="color:rgb(71, 101, 130);">union()</font> 实现集合的并集,语法规则为:<font style="color:rgb(71, 101, 130);">集合1.union(集合2)</font>,运行下方语句:
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1.union(novels_2))
    4. print(novels_2.union(novels_1))
    1
    2
    3
    4
    5 我们看到,通过 <font style="color:rgb(71, 101, 130);">union()</font> 实现了集合 novels_1 和集合 novels_2 的并集。

    #4.1.2 <font style="color:rgb(71, 101, 130);">|</font>

    也可以使用 <font style="color:rgb(71, 101, 130);">|</font> 对两个集合进行并集的运算,语法规则为 <font style="color:rgb(71, 101, 130);">集合1|集合2</font>,运行下方语句:
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1 | novels_2)
    1
    2
    3
    4

    #4.2 交集

    我们继续一起来看交集: A,B 是两个集合,由所有属于集合 A 且属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的交集(intersection),记作 A∩B。我们使用 <font style="color:rgb(71, 101, 130);">intersection()</font> <font style="color:rgb(71, 101, 130);">&</font> 实现不同集合间的交集。

    9集合 - 图4

    #4.2.1 <font style="color:rgb(71, 101, 130);">intersection()</font>

    可以实现集合 A 和集合 B 的交集运算,语法规则是 <font style="color:rgb(71, 101, 130);">集合1.intersection(集合2)</font>,运行下方语句 :
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1.intersection(novels_2))
    4. print(novels_2.intersection(novels_1))
    1
    2
    3
    4
    5

    #4.2.2 <font style="color:rgb(71, 101, 130);">&</font>

    <font style="color:rgb(71, 101, 130);">&</font> 也可以实现集合 A 和集合 B 的交集运算,语法规则是 <font style="color:rgb(71, 101, 130);">集合1 & 集合2</font>,运行下方语句:

    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1 & novels_2)
    1
    2
    3
    4 我们看到打印出了两个集合间的交集。

    #4.3 差集

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

    9集合 - 图5

    #4.3.1 <font style="color:rgb(71, 101, 130);">difference()</font>

    我们可以使用 <font style="color:rgb(71, 101, 130);">difference()</font> 来实现差集的运算,语法规则为<font style="color:rgb(71, 101, 130);">集合1.difference(集合2)</font>:即实现属于集合 1 不属于集合 2 的差集,我们一起运行下方语句:
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1.difference(novels_2))
    4. print(novels_2.difference(novels_1))
    1
    2
    3
    4
    5 当集合 novels_1 在 <font style="color:rgb(71, 101, 130);">difference()</font> 之前时,打印的是属于集合 novels_1 不属于集合 novels_2 的元素集合,集合 novels_2 在 <font style="color:rgb(71, 101, 130);">difference()</font> 之前时,打印的是属于集合 novels_2 不属于集合 novels_1 的元素集合。

    #4.3.2 <font style="color:rgb(71, 101, 130);">-</font>

    我们可以使用<font style="color:rgb(71, 101, 130);">-</font>来实现差集的运算,语法规则为 <font style="color:rgb(71, 101, 130);">集合1-集合2</font>:即实现属于集合 1 不属于集合 2 的差集,我们一起运行下方语句:
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1 - novels_2)
    4. print(novels_2 - novels_1)
    1
    2
    3
    4
    5

    #4.4 对称差集

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

    9集合 - 图6

    #4.4.1 <font style="color:rgb(71, 101, 130);">symmetric_difference()</font>

    我们可以使用 <font style="color:rgb(71, 101, 130);">symmetric_difference()</font> 来实现对称差集的运算,语法规则是:<font style="color:rgb(71, 101, 130);">集合1.symmetric_difference(集合2)</font>,一起来运行下方语句:
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1.symmetric_difference(novels_2))
    4. print(novels_2.symmetric_difference(novels_1))
    1
    2
    3
    4
    5

    #4.4.2 <font style="color:rgb(71, 101, 130);">^</font>

    我们可以使用 <font style="color:rgb(71, 101, 130);">^</font> 来实现对称差集的运算,语法规则是:<font style="color:rgb(71, 101, 130);">集合1^集合2</font>,一起来运行下方语句:
    1. novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖'}
    2. novels_2 = {'鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}
    3. print(novels_1 ^ novels_2)
    4. print(novels_2 ^ novels_1)
    1
    2
    3
    4
    5

    #5 总结

    今天的介绍就到这里了,我们一起看下本关总结:

    9集合 - 图7

    #6 练习题

    求集合 <font style="color:rgb(71, 101, 130);">novels_1 = {'飞狐外传', '雪山飞狐', '连城诀', '天龙八部', '射雕英雄传', '白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录'}</font><font style="color:rgb(71, 101, 130);">novels_2 = {'白马啸西风', '鹿鼎记', '笑傲江湖', '书剑恩仇录', '神雕侠侣', '侠客行', '倚天屠龙记', '碧血剑', '鸳鸯刀'}</font>的并集,交集,差集和对称差集。

    更新于: 12/30/2021, 2:46:39 AM