专栏首页人生代码爬虫 (十七) 你懂集合? (九)

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

欢迎关注我的公众号,志学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_setb_set 的 子集 — 所有 a_set 的成员均为 b_set 的成员

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

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

布尔上下文环境中的集合

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

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

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

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

集合清除 clear

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

本文分享自微信公众号 - 志学Python(gh_755651538c61),作者:志学Python

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 加点JavaScript魔法

    在深入研究客户端之前,让我们先了解一下支持这些用户弹窗所需的服务器端的工作。用户弹窗的内容将由新路由返回,它是现有个人主页路由的简化版本。视图函数如下:

    公众号---人生代码
  • 爬爬更健康

    爬取淘宝商品的信息,数据主要用于分析市场趋势,从而制定一系列营销方案。实现功能如下:

    公众号---人生代码
  • 震惊!垃圾分类居然能用Python搞定!

    有了弹幕数据后,我们需要先将解析好,并保存在本地,方便进一步的加工处理,如制成词云图进行展示。

    公众号---人生代码
  • 4.93Python数据类型之(8)集合

    py3study
  • Java集合框架一览笔录

    1、集合概念 集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所以的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,ja...

    斯武丶风晴
  • Python-入门-07-集合

    zishendianxia
  • Python入门(12)

    集合(set)是一个无序不重复的序列。通常,我们使用集合来消除重复元素,或者用于测试两个序列的关系:交集、并集或差集?

    高一峰
  • 第三章--第五节:集合

    由于集合是无序的,所以索引没有任何意义,所以我们无法利用索引获取和更新元素,但是我们可通过循环的方式获取元素,代码如下:

    喵叔
  • [ Java面试题 ]WEB篇

    Kevin_Zhang
  • 一文掌握Python集合的语法与应用

    Python语言中的集合是无序的、可变的容器类对象,所有元素放在一对大括号中,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,不允许重复。

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券