查看原文
其他

集合常用方法小结

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:李钊颖

文字编辑:宁刘莹

技术总编:张   邯


重磅!!!为了大家能够更好地学习Python技术,以及应广大粉丝和往期学员的要求,2019年11月29日-12月1日,武汉字符串数据科技有限公司将在湖北武汉举办《第四期Python编程技术培训》。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python的编程技术,特别是网络数据抓取技术。目前正在火热招生中~

详细培训大纲及报名方式,请点击《2019年Python第四期培训招生》或点击文末阅读原文呦~


Python中的集合数据类型指的是一系列值(元素)组成的一个集合,可进行关系测试、删除重复数据,以及计算数学运算,如交集、并集、差异和对称差异。在之前的推文中我们已经介绍过集合的定义和特点(《数据类型——DictSetFrozenset简析》,在今天的推文中我们详细地介绍下集合的常用方法。

 

1.集合的赋值


(1) S.add(X)表示如果X不在集合S中,就将X增加到集合S中。S.add(X)增加时只能增加一个值,不能增加多个。
In [1]: fruit = {'apple', 'banana', 'orange'}In [2]: fruit.add('pear')In [3]: fruitOut[3]: {'apple', 'banana', 'orange', 'pear'}  #集合fruit中的增加了元素pear


(2) S.update(S1)表示将S1更新到集合S中,更新后集合S中包括两者剔除重复后的所有元素,S1参数可以是列表、元组、字典等。S.update(S1)可以只增加一个,也可以增加多个值。

In [4]: color = {'red','yellow','orange'}In [5]: fruit.update(color) #将color中的元素增加到fruit中In [6]: fruitOut[6]: {'apple', 'banana', 'orange', 'pear', 'red', 'yellow'} In [7]: colorOut[7]: {'orange', 'red', 'yellow'}  #集合color中的元素不变


S1为字符串时,默认将字符串的每一个字符作为一个元素增加到集合中,如果想将字符串作为整体加进去,可以使用add()方法,也可以将字符串放入花括号中作为集合的一个元素更新进去。
In [8]: color.update('爬虫')In [9]: colorOut[9]: {'orange', 'red', 'yellow', '爬', '虫'} In[10]: color.update({"爬虫"})Out[10]: {'yellow', '爬虫', 'red', 'orange'}


(3) S1=S.copy()表示把集合S的内容复制给集合S1

In [11]: fruit = {'apple', 'banana', 'orange'}In [12]: a=fruit.copy()In [13]: aOut[13]: {'apple', 'banana', 'orange'}  #集合a和集合fruit内容一样。


以上三种方法都可以对集合的元素值进行更新。

 

2.删除集合中的元素

 

(1) S.discard(X)表示移除集合S中的X元素,如果集合S中没有X元素,则什么也不做,也不会报错。

In [14]: fruit.discard('yellow')In [15]: fruitOut[15]:{'apple', 'banana', 'orange', 'pear', 'red'}  #集合fruit中的元素orange被移除掉了


(2) S.pop()表示从集合中选择任意一个元素删除,并返回删除值。

In [16]: fruit.pop()Out[16]: 'pear' #集合fruit中的元素pear被返回回来
In [17]: fruitOut[17]: {'apple', 'banana', 'orange', 'red'}  #pear元素从fruit中删除了


如果要指定删除元素,则会报错。因为pop()函数不能指定参数。

In [18]: fruit.pop('red')TypeError Traceback (most recent call last)<ipython-input-12-dc413c4ebc5b> in <module>----> 1 fruit.pop('red')TypeError: pop() takes no arguments (1 given)


如果要删除指定元素,可以使用remove()方法。

 

(3) S.remove(X)表示移除集合S中的X元素,但删除的元素必须是集合中的元素,否则就会报错。

In [19]: fruit.remove('red')In [20]: fruitOut[20]: {'banana', 'orange', 'yellow'} #指定的元素red被删除掉了
In [21]: fruit.remove('爬虫俱乐部') #指定一个不在集合中的元素---------------------------------------------------------------------------KeyError Traceback (most recent call last)<ipython-input-10-4df394dfd672> in <module>----> 1 fruit.remove('爬虫俱乐部')KeyError: '爬虫俱乐部'  


(4) S.clear()表示移除集合S中的所有元素,注意这里是全部删除,不能指定删除元素。

In [22]: fruit.clear()In [23]: fruitOut[23]: set()   # 返回一个空的集合


3.集合的运算

 

       首先,我们重新定义集合fruitcolor

In [24]: fruit = {'apple', 'banana', 'orange'}In [25]: color = {'red','yellow','orange'}


(1) 交集运算,得出两个集合的相同元素。其语法结构为S.intersection(S1),等价于“S & S1”,此时返回两个集合中的共同元素,原来的集合不变。

In [26]: fruit.intersection(color)Out[26]: {'orange'}   


S.intersection_update(S1),返回集合S和集合S1的共同元素,并更新S。等同于“S= S & S1”,此时返回的共同元素会赋值给S

In [27]: fruit.intersection_update(color)In [28]: fruitOut[28]: {'orange'}  #集合fruit更新后只包含两个集合的共有元素


(2) 并集运算,将两个集合的元素剔除重复之后拼接起来。其语法结构为S.union(S1),等价于“S| S1”。

In [29]: fruit.union(color)Out[29]: {'apple', 'banana', 'orange', 'red', 'yellow'}  #两个集合的非重复元素拼接


(3) 差集运算,将被减集合中两者共有的元素去掉。其语法结构为S.difference(S1),等价于“S- S1”,结果是去掉元素的被减集合。

In [30]: fruit.difference(color)Out[30]: {'apple', 'banana'} #即包含fruit中但不包含color中的元素组成的集合In [31]: color.difference(fruit)Out[31]: {'red', 'yellow'}  #即包含color中但不包含fruit中的元素组成的集合

S.difference_update(S1),返回删除了集合S1中也含有的元素后的集合S。等同于“S= S – S1”

In [32]: fruit.difference_update(color)In [33]: fruitOut[33]: {'apple', 'banana'}  #返回去掉两者重复元素后的集合fruit

(4) 取对称差集,过滤掉共有元素,输出两个集合中的不同元素。其语法结构为S.symmetric_difference(S1),等价于“S ^ S1”,取S S1中的不同元素。

In [34]: fruit.symmetric_difference(color)Out[34]: {'apple', 'banana', 'red', 'yellow'}  #删除重复元素,只留下不同元素

       S.symmetric_difference_update(S1),表示将剔除两个集合的重复元素,并将剔除之后的集合S1更新到集合S中。

In [35]: fruit.symmetric_difference_update(color)In [36]: fruitOut[36]: {'apple', 'banana', 'red', 'yellow'}  #集合fruit包含两个集合的所有不同元素

4.判断集合关系


(1) A.isdisjoint(B)判断两个集合是否包含相同的元素,返回布尔类型,若没有相同元素则返回True,有相同元素则返回False
In [37]: fruit.isdisjoint(color)Out[37]: False  # fruit与color有相同元素,返回False

       (2) A.issubset(B)判断两个集合是否是子集关系(A⊆B)。即判断集合A中的所有元素是否都包含在集合B中,若都包含在集合B中则返回True,否则返回False.

In [38]: fruit.issubset(color)Out[38]: False  #集合fruit中的元素并没有全部包含在集合color中,返回False

       (3) A.issuperset(B)判断集合B中的所有元素是否都包含在集合A中,若都包含在集合A中则返回True,否则返回False

In [39]: color = {'orange'}In [40]: fruit.issuperset(color)Out[40]: True  #集合color中的所有元素都包含在集合fruit中,返回True

方法太多记不住?一张图带你快速梳理记忆:


至此,集合的定义、特点以及常用方法就介绍完了,相信大家对集合也有了更深的理解。想要获得第一手Stata和Python的学习资讯,请持续关注爬虫俱乐部的微信公众号!




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

实战演练-爬取深交所年报

      重建“通天塔” —— Unicode编码与解码
输出分组描述性统计表的利器——report
字典常用操作小结
XPath Helper助XPath爬虫一臂之力
查找变量?用“codebook”!
distinct命令用法一览
Stata数据分析技术应用培训
玩转Python之“手把手”教你爬数据(一)
玩转Python之“手把手”教你爬数据(二
labelsof和labelbook介绍
Statalist上的“火云邪神”
爬虫实战程序的函数封装
Zipfile(二)
利用collapse命令转化原始数据
Stata中的数值型
爬虫实战——聚募网股权众筹信息爬取
duplicates drop之前,我们要做什么?
类型内置函数-type() isinstance()

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存