8. ㊙ Python 集合三板斧,滚雪球学 Python

梦想橡皮擦 等级 448 0 0

学编程要简单、粗暴。更要有效,很多时候学的越多,忘得越快。但编程总有那么一天顿悟的时候,而顿悟的契机目前就是建立在你跟橡皮擦坚持打卡 100 天,在评论区坚持跟橡皮擦卡学习的朋友,在 100 天之后,橡皮擦将送出 神秘大奖

八、Python 中一个无序且元素唯一的数据类型,它是集合。

8.1 集合是啥

集合是一个数据类型,它其中的每个元素的顺序不固定,但唯一。多么绕的一句话,回味,一定要好好回味。

集合中的元素内容必须是不可变类型,例如整数、浮点数、字符串、元组等内容,可变的列表、字典、集合不可以。

集合本身是可变的,跟列表一样可以增删元素。

8.1.1 集合的声明

截止到现在,小括号用来声明元组,中括号用来声明列表,大括号用来声明字典,那集合怎么办?Python 中也是用大括号来声明集合。当然你也可以通过 set 函数建立集合。

集合定义的语法格式如下:

my_set = {元素1,元素2,...}

简单的代码示例如下:

my_set = {1, 2, 3, 3, 10, 4, 5, 6}

print(my_set)

数据输出之后,会发现重复的整数 3 只剩下一个了。还是因为集合的元素是唯一的,出现重复多的部分将会舍去。

如果在集合中使用了可变类型作为元素,会报错。

my_set = {1, 2, 3, [3, 10, 4, 5, 6]}
# 错误提示:TypeError: unhashable type: 'list'
print(my_set)

这里需要注意下,空集合的声明不能使用 {},只用一个大括号表示的是空字典。声明一个空集合需要用到 set 函数。

8.1.2 set 函数定义集合

使用 set 函数可以定义集合,并且可以定义空集合。set 函数参数可以为字符串、列表、元组。

通过 set 定义空集合

my_dict = {}
my_set = set()

# 空字典
print(type(my_dict))
# 空集合
print(type(my_set))

set 将字符串转换成集合

set 函数类似一个强制转换,可以将其它类型的转换成集合。

my_set = set("my name is xiangpica")
print(my_set)

该内容会过滤重复字母,并且输出的顺序不定,因为集合是无序的。

集合可以对元组去重

借助集合元素的不允许重复,可以实现一些特定的效果,例如去重。

my_tuple = ("apple", "orange", "orange", "pear", "banana", "food")
my_set = set(my_tuple)
print(my_set)

8.2 集合的操作

在学集合相关操作前,需要在学习一些符号。

符号 含义
& 交集
| 并集
- 差集
^ 对称差集

接下来的内容就非常类似高中线代里面的概念了,求集合的交并差集。

8.2.1 交集(intersection)

交集就是求两个集合共有的元素。

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1 & my_set2
print(both)

除了通过 & 符号以外,还可以通过集合的 intersection 方法完成。

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1.intersection(my_set2)
print(both)

8.2.2 并集(union)

并集就是取所有集合的所有元素,如果出现重复的保留一个。使用符号 | 或者 union 方法完成。

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1 | my_set2
print(both)

使用 union 完成。

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1.union(my_set2)
print(both)

8.2.3 差集(difference)

对于求集合的差集与交并集不同,有个先后顺序问题,例如属于 A 但不属于 B 表示为 A-B,同理属于 B 但不属于 A,表示为 B-A。

差集的符号是 -,可以使用 difference 方法进行运算。

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}
# 求解属于 A,但不属于 B 的元素
dif1 = my_set1 - my_set2
print(dif1)
# 求解属于 B,但不属于 A 的元素
dif2 = my_set2 - my_set1
print(dif2)

接下来如何使用 difference 方法去求差集就交给你自己完成啦。

8.2.4 对称差集(symmetric difference)

A 与 B 两个集合,如果想要获得属于 A 或者 B 集合的元素,但又不要属于 A 且属于 B 的元素,这时就是对称差集的应用场景了。

对称差集的符号是 ^,方法名是 symmetric_difference

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}

dif = my_set1 ^ my_set2
print(dif)

上述代码就会输出既不属于 A 也不属于 B 的元素,即对称差集。

8.3 集合的方法

8.3.1 集合的增删

add 方法可以在集合中增加元素,语法格式如下:

my_set.add(新增元素)

第一个需要注意的新的元素如果已经存在集合中,不会新增进去,第二个需要注意的是集合是无序的,新增加元素的位置将不确定。

my_set = {"apple", "orange", "pear", "grape"}
my_set.add("new")
my_set.add("new")
print(my_set)

remove 方法可以删除集合中元素,前提是该元素在集合中,如果删除不存在的元素报错。

my_set = {"apple", "orange", "pear", "grape"}

my_set.remove("apple")

print(my_set)
# 第二次删除报错 因为 apple 已经不在集合中
my_set.remove("apple")
print(my_set)

discard 方法可以删除集合元素,如果元素不存在不会报错。

my_set = {"apple", "orange", "pear", "grape"}

my_set.discard("apple")
print(my_set)

my_set.discard("apple")
print(my_set)

pop 方法为随机删除一个元素,被删除的元素会被返回,即可以用一个变量接收被删除的元素,如果集合为空使用 pop 会报错。

my_set1 = {"apple", "orange", "pear", "grape"}

# pop 方法随机删除一个元素,将被删除的元素返回
var = my_set1.pop()
print(var)

# 空集合使用 pop 方法报错
my_set2 = set()
var = my_set2.pop()
print(var)

clear 方法删除集合内的所有元素

my_set1 = {"apple", "orange", "pear", "grape"}

my_set1.clear()
print(my_set1)

8.3.1 集合的其它方法

isdisjoint 方法用于判断两个集合是否存在相同元素,没有返回 True,否则返回 False。

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

# 两个集合没有相同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool) # 返回 True

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon","apple"}

# 两个集合有相同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool)

issubset 该方法用于判断一个集合是否是另一个集合的子集,确定是返回 True,否则返回 False。

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

# 第二个集合不是第一个集合的子集
ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 False

# 第二个集合是第一个集合的子集
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"orange","apple"}

ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 True

注意判断 A 是 B 的子集,格式是 A.issubset(B),顺序别搞错。

issuperset 方法用于判断一个集合是否是另一个集合的父集,与 issubset 恰好相反,具体实现由大家自行完成。

update 方法用于将一个集合的元素添加到另一个集合内,语法格式如下:

被添加的集合A.update(待添加的集合B)

该方法谁在前就是给谁添加。

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

my_set1.update(my_set2)
print(my_set1)

其它一些方法,本轮滚雪球阶段只做了解。

  • intersection_update 此方法用于求多个集合的交集
  • difference_update 删除集合内与另一集合重复的元素
  • symmetric_difference_update 类似对称差集的用法

8.4 集合可用的内置函数

8.4.1 max、min、sum

以上内置函数作用域集合与列表使用规则一致,自行测试即可。

8.4.2 len

获取集合元素的数量。

8.4.3 sorted

使用该函数可以对集合进行排序。

8.5 冻结集合 frozenset

集合中的元素可以添加与删除,与列表可以对应。 还存在一种不可进行添加与删除元素的集合,叫做冻结集合,与元组可以对应学习。

冻结集合不做展开讲解,有兴趣的可以检索一些,不过我觉得这节课内容已经非常多啦。

8.6 这篇博客的总结

集合,一个无序且元素必须唯一的容器型数据类型,在橡皮擦的编程生涯中,集合经常用来去重,效率高、编写简单,值得掌握。

下篇博客开始,我们将进入 Python 函数的世界,难度要来了哦~

最后一碗毒鸡汤

当你学会破罐破摔 你会发现这世界豁然开朗 O(∩_∩)O 哈哈~

🍂🍂🍂🍂🍂🍂🍂


8. ㊙ Python 集合三板斧,滚雪球学 Python

收藏
评论区

相关推荐

10. 比找女朋友还难的技术点,Python 面向对象
有人整个 Python 学习生涯都没有搞明白的技术之一:面向对象。 先放美图调整下心情。 十、Python 面
15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工
本篇文章将给大家介绍 Python 多线程与多进程相关知识,学习完该知识点之后,你的 Python 程序将进入另一个高峰。 <center<font colorred缓解一下视疲劳</font</center 15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工(https://imghelloworld.oss
原来Python绘图也可以这么漂亮,这次真的是学习到了!
(https://imghelloworld.osscnbeijing.aliyuncs.com/8830803f033eeed85783e9058cf08968.png) 作者:朱小五 来源:快学Python 👆人生苦短,快学Python! 最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介
我的python总结
建议刚开始学习直接使用ANACONDAhttps://www.anaconda.com/download/配置python环境变量https://docs.python.org/3.6/using/cmdline.htmlenvvarPYTHONMALLOCPython PEP8导包顺序1. Python标准
Python编程基础(快速入门必看
Python编程基础一、Python语言基本语法 Python是一
为啥要学Python?
为啥要学Python?如果我跟你说你现在用一天拉出来的财务统计表,学了Python之后能用1个小时就搞定,你学不学?如果你花了8个小时扒的竞品投放数据,学了Python之后能用30min搞定,你学不学?你总羡慕你的同事能6点下班,陪女朋友蹦迪夜生活丰富,你却在满脸油头的爆肝加班,学了Python之后,你也能这样,你学不学?如果我跟你说,学会了Python能增
Python初学者必备书籍《Python入门经典》高清PDF版|百度网盘免费下载|Python初学者,自学Python必读
提取码:1028以及前文提到的学习路线图内容简介Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python可以用于很多的领域,从科学计算到游戏开发。《Python入门经典》是面向Python初学者的学习指南,详细介绍了Python编程基础,以及一些高级概念,如面向对象编程。全书分为24章。第1章介绍了Python的背景和安装方法。第2章
最好用的Python学习教程第一篇章
学习不打烊,充电加油只为遇到更好的自己。希望大家如果觉得好的话可以点赞,评论鼓励一下。 一、从这里学起?学Python你应该知道这些内容。 1.1 导语如何快速学会Python?这篇博客会告诉你如何从无到有,构建自己的知识框架,博客主励志打造最好用的Python基础教程。 1.2 为什么要学习Python 简单易学Python是一种代表简单主义思想的语言,
零基础应该如何开始学习python
随着人工智能时代的到来,Python也在不断发展壮大,越来越多的人选择学Python,只要因为它容易学习,功能又强大还可以跨平台。其实Python作为一门脚本语言,难度上相较于其他语言略微简单点,但是对于没有计算机基础的人来说,也是非常难得,可能安装这一步就会难倒大家!1、Python学习确定方向对于刚入门的人来说,要先把Python基础和进阶学透,再继续往
怎么学python,学习python的正确姿势
Python是一门相对来说比较简单的编程语言,自学是非常轻松的。首先得明白python有哪些发展方向 需要了解这个这门语言 而不是听说 这个高薪资 容易学习最好的学习状态就是出于兴趣 兴趣是最好的老师 当然对钱感兴趣也是可以的。一、人工智能二、大数据三、网络爬虫工程师四、Python web全栈工程师五、Python自动化运维六、Python自动化测试再来说
关于学习python的一点意见分享
Python适合初学者入门。Python作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。相比其他主流语言,有更好的可读性,上手相对容易。各种模块,免去了很多重复的工作,更快地写出东西。配置环境也不复杂,mac和linux内置了Python。自学python,最大的3个经验:.一本易懂,比较好的教程,从头到尾
python的学习难?你的方法不对罢了,看看我的。
1、选择Python版本对于使用python的人来说,python的版本就是我们的工作环境,因此,在学习之前需要考虑好学习哪个版本,python2和python3的版本不同,会存在一些差异,虽说不大,但直接学习python3 的话相对来说会好一点,而且跑一趟还能3相对来说对零基础的小白来说更加的友好,容易上手。2、学习Python基础知识Python 是一个
全网最全python学习路线图,让学习不迷路
学习Python有一段时间了,最近也是在不断的整理Python相关的基础知识和学习一些新的知识,想来分享给大家。我刚开始接触Python时,和大多数初学者一样不知道从那里开始学习python,我也在网上找了许多python相关的资料来学习,但是资料多也不见得就好,因为不知道从哪里开始下手,走了许多弯路。后面我就整理了一套对初学者来说学习python能很快上手
玩转python爬虫
&ensp;&ensp;&ensp;  近几年来,python的热度一直特别火!大学期间,也进行了一番深入学习,毕业后也曾试图把python作为自己的职业方向,虽然没有如愿成为一名python工程师,但掌握了python,也让我现如今的工作开展和职业发展更加得心应手。这篇文章主要与大家分享一下自己在python爬虫方面的收获与见解。 &ensp;&ensp;
盘点一款Python二级考试模拟软件,带你轻松过关二级Python考试
大家好,我是Python进阶者。今天给大家讲的这个软件,主要是想让大家通过这个软件能将自己的Python基础进一步提高。一、前言相信有些小伙伴学习Python有一段时日,但是又不知道自己的Python基础学的如何,这个时候就需要一款神器来检测一下自己的Python基础了。要想检测自己的Python功力最直观的方法当然是做题了,至于做什么题了我们就不得而知了,