为了账号安全,请及时绑定邮箱和手机立即绑定

爬虫 (十七) 你懂集合? (九)

标签:
Python

最重要的一点就是如果您觉得对您有帮助,希望可以点个在看,或者点一点文章中最下面的广告,给小编我加个鸡腿,毕竟小编写文章也是很辛苦的,非常感谢

在生活中比如我们去约会,女朋友说去她宿舍楼下集合,比如上体育课的时候,体育老师催着口哨,吆喝着集合,比如我们好几个人越好了去爬山,在某个地点集合,等等,似乎集合在生活中无处不在,此‘集合’非‘集合’,但是都是异曲同工之妙,都是具有交集

所以今天我们就来讲讲 python 中集合,集合set 是装有独特值的无序“袋子”。一个简单的集合可以包含任何数据类型的值。如果有两个集合,则可以执行像联合、交集以及集合求差等标准集合运算

1. 该如何创建集合 set


1. 要创建只包含一个值的集合,仅需将该值放置于花括号之间({}

2. 实际上,集合以 类 的形式实现,但目前还无须考虑这一点

3. 要创建多值集合,请将值用逗号分开,并用花括号将所有值包裹起来

还可以 列表 为基础创建集合

1. 要从列表创建集合,可使用 set() 函数。(懂得如何实现集合的学究可能指出这实际上并不是调用某个函数,而是对某个类进行实例化。我_保证_在本书稍后的地方将会学到其中的区别。目前而言,仅需知道 set() 行为与函数类似,以及它返回一个集合)

2. 正如我之前提到的,简单的集合可以包括任何数据类型的值。而且,如我之前所提到的,集合是 无序的。该集合并不记得用于创建它的列表中元素的最初顺序。如果向集合中添加元素,它也不会记得添加的顺序

3. 初始的列表并不会发生变化

修改集合


有两种方法可向现有集合中添加值: add() 方法和 update() 方法

1. add() 方法接受单个可以是任何数据类型的参数,并将该值添加到集合之中

2. 集合是装 唯一值 的袋子。如果试图添加一个集合中已有的值,将不会发生任何事情。将不会引发一个错误;只是一条空操作

3. update() 方法仅接受一个集合作为参数,并将其所有成员添加到初始列表中。其行为方式就像是对参数集合中的每个成员调用 add() 方法

4. 由于集合不能包含重复的值,因此重复的值将会被忽略

5. 实际上,可以带任何数量的参数调用 update() 方法。如果调用时传递了两个集合, update() 将会被每个集合中的每个成员添加到初始的集合当中(丢弃重复值)

6. update() 方法还可接受一些其它数据类型的对象作为参数,包括列表如果调用时传入列表,update() 将会把列表中所有的元素添加到初始集合中

从集合中删除元素


有三种方法可以用来从集合中删除某个值。前两种,discard() 和 remove() 有细微的差异

1. discard() 接受一个单值作为参数,并从集合中删除该值

2. 如果针对一个集合中不存在的值调用 discard() 方法,它不进行任何操作。不产生错误;只是一条空指令

3. remove() 方法也接受一个单值作为参数,也从集合中将其删除

4. 区别在这里:如果该值不在集合中,remove() 方法引发一个 KeyError 例外

就像列表,集合也有个 pop() 方法

1. pop() 方法从集合中删除某个值,并返回该值。然而,由于集合是无序的,并没有“最后一个”值的概念,因此无法控制删除的是哪一个值。它基本上是随机的

2. clear() 方法删除集合中 所有 的值,留下一个空集合。它等价于 a_set = set(),该语句创建一个新的空集合,并用之覆盖 a_set 变量的之前的值

3. 试图从空集合中弹出某值将会引发 KeyError 例外

常见集合操作


1. 要检测某值是否是集合的成员,可使用 in 运算符。其工作原理和列表的一样

2. union() 方法返回一个新集合,其中装着 在两个 集合中出现的元素

3. intersection() 方法返回一个新集合,其中装着 同时 在两个集合中出现的所有元素

4. difference() 方法返回的新集合中,装着所有在 a_set 出现但未在 b_set 中的元素

5. symmetric_difference() 方法返回一个新集合,其中装着所有 只在其中一个 集合中出现的元素

其他操作方式

集合的分类:

并集:以属于A或属于B的元素为元素的集合成为A与B的并(集)

交集:以属于A且属于B的元素为元素的集合成为A与B的交(集)

差:以属于A而不属于B的元素为元素的集合成为A与B的差(集)

对称差:对称差相当于两个相对补集的并集

注:空集属于任何集合,但它不属于任何元素.

最后,有几个您可能会问到的问题

1. a_set 是 b_set 的 子集 — 所有 a_set 的成员均为 b_set 的成员

2. 同样的问题反过来说, b_set 是 a_set 的 超集,因为 a_set 的所有成员均为 b_set 的成员

3. 一旦向 a_set 添加一个未在 b_set 中出现的值,两项测试均返回 False

布尔上下文环境中的集合


可在 if 这样的 布尔类型上下文环境中 使用集合

1. 在布尔类型上下文环境中,空集合为假值

2. 任何至少包含一个上元素的集合为真值

3. 任何至少包含一个上元素的集合为真值。元素的值无关紧要

集合清除 clear

ok, 今天集合就讲到这里吧,我相信集合中的知识不仅仅只有这些,还有更加深层次的东西值得我们去好好的研究研究,今天的目标算是完成了,不知道读者的小目标完成没有,真心希望读者跟着小编的节奏来学习,不要过于心急,就像投资界大佬所说的,时间才是最有复利价值的,只管深入学习,深入思考每一件事情,只管成长,剩下的交予时间吧,因为人与人之间真的是不平等的,天底下最平等的东西就只有’时间’,这个维度了,我希望读者跟着我在不同维度上扩展,不要局限于某一维度,但是我们至少要做某一维度的强者,自己的强者

请继续关注我

最重要的一点就是如果您觉得对您有帮助,希望可以点个在看,或者点一点文章中最下面的广告,给小编我加个鸡腿,毕竟小编写文章也是很辛苦的,非常感谢

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消