查看原文
其他

Python数据结构-集合的创建及使用

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

本文作者:田志凡

文字编辑:周聪聪

技术总编:张学人

好消息!!!爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python爬虫技术,并明确未来更进一步的学习方向。

详细培训大纲及报名方式,请点击文末阅读原文呦~

在Python语言中,基本的数据结构有列表list、元组tuple、字典dict、集合set等。在本篇推文中,我们将介绍“集合”的创建和使用。集合是任意不重复的、无序的元素的集,这些元素可以是数字,字符串或元组等。

集合的创建

(1)直接创建,将集合中的元素放置在{}中,以逗号分隔,如下:

a={'Stata club','爬虫俱乐部',6,6,6}print(a)

type(a) #查看a的类型

可以看出创建的a为集合,其中重复的元素6自动保留一个,这些不重复的元素是无序的,每次运行程序,集合print出来的顺序也会不一致。

(2)使用set()函数或forzenset()函数来分别创建可变的集合和不可变的集合(不可变集合,无法对其中的元素进行添加、删除、更新等)。如下:

b=set(['Stata club','爬虫俱乐部',6,6,6])c=frozenset(['Stata club','爬虫俱乐部',6,6,6])

注意,上述两种方式均可以创建集合,但是对于空集合的创建要使用set函数,因为a={}创建的是空字典,而不是空集合。

集合的运算

(1)单个集合,可以对其中的元素进行添加(add)、删除(remove)、更新(update)、弹出(pop)等操作。如下:

增加元素

d=set(['Stata club','爬虫俱乐部',6,6,6])d.add(789)print(d)

如上,元素789被增加到集合d中了。

删除元素

d.remove(6)print(d)

如上,集合d中的元素6被删除了。

更新元素

d.update([123,456,789])print(d)

如上,集合d中更新了其中没有的元素123,456。

除列表外,任意序列数据也可被update接收,如下:

d.update("ABC")print(d)

如上,字母A,B,C被更新到集合d中了。

弹出元素

d.pop()print(d)

pop()中为空,表示从集合中弹出一个元素,并将此元素从集合中删除。如下,我们运行“弹出”命令,集合中的元素“A”被弹出,且从集合d中删除。


由于集合中的元素是无序的,每次运行程序,弹出的元素也是不确定的。

(2)多个集合,则可以进行取并集(union)、取交集(intersection)、取差集(difference)、判断包含关系等操作,这些集合的运算和数学上的概念一致,具体操作如下:

首先,我们创建4个集合a,b,c,d,然后对这四个集合进行演示。

a={1,2,3}b={2,3,4,5}c={3,4,5,6}d={1,2,3,4,5,6}

取并集

集合a与b取并集,可选下述两种方法之一:

a.union(b) #集合a与b取并集a|b #集合a与b取并集

集合a与b与c取并集

a.union(b).union(c) #集合a与b与c取并集a|b|c #集合a与b与c取并集

取交集

集合a与b取交集

a.intersection(b) #集合a与b取交集a&b

多个集合同取交集,在intersection或&后面添加集合名即可。

取差集

a.difference(b) #集合a中有,而b中没有的元素a-b #集合a中有,而b中没有的元素

b.difference(a) #集合b中有,而a中没有的元素b-a #集合b中有,而a中没有的元素

取对称差集

a.symmetric_difference(b) #集合a和b的并集中,去除两集合相交的部分a^b #集合a和b的并集中,去除两集合相交的部分

包含关系判断

a.issubset(b) #判断集合a是否是集合b的子集

该行代码运行之后,返回一个布尔值,如下:False表示否,即a不是b的子集。

此外,还可以直接使用比较运算符来直接判断,如下:

a<=b #判断集合a是否是集合b的子集a<=aa<=d

爬虫俱乐部将于2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,此次课程的特点是零基础、案例教学、循序渐进。此次课程受河南牧业经济学院金融学院和会计学院邀请而特别定制,我们的课室还有20台机位,为回馈河南地区粉丝长期以来对我们的支持,本次课程将推出最优惠的价格面向河南省内的高校教师和学生进行小规模招生!

集合的使用案例:生成不重复的随机数

集合中最重要的一个特点就是其中的元素互不相同,在使用随机函数生成随机数的过程中,有可能生成重复的随机数。随机函数与集合相结合,将每一个生成的随机数添加到集合中,来剔除重复的随机数,这样便可以生成没有重复数值的随机数序列。

如下程序,生成10个[1,100]之间,不重复的随机整数。

import randomset_a = set([]) #生成空集合set_ai=len(set_a) #集合set_a中包含的元素个数N=10 #生成随机数的个数while i<N: #当集合中元素的个数少于我们要生成的随机数数量时 number=random.randint(1,100) #生成[1,100]之间的随机整数 set_a.add(number) #将随机整数number增加到集合中去 i=len(set_a)print(set_a)sorted(set_a)

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

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

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

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