查看原文
其他

【数据结构】集合的使用方法

爬虫俱乐部 Stata and Python数据分析 2023-01-01

本文作者:万 浩,中南财经政法大学统计与数学学院

本文编辑:刘光中

技术总编:王玉婷

Stata&Python云端课程来啦!

      好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

引言

Python有4种内建的数据结构,分别是列表(list)、元组(tuple)、字典(dict)、集合(set),每种数据结构都有自己的特点,并且都有着独到的用处。在本篇推文中,我们主要介绍集合和列表、元组的异同和交互,遍历集合中的元素以及集合的基本方法。

一、列表、元组和集合的异同列表是一种特别的对象集合(由一个方括号”[ ]”括住),它的元素由下标区分,但是各元素的类型可以是任意Python对象,不同元素不必是同一类型。元素本身允许是其它复杂数据类型,比如,列表的一个元素可以是列表;并且列表是可变类型,可以添加、删除和修改元素。列表中的每一个元素都对应着一个下标,意味着我们可以通过输入下标来索引对应的元素,如:
list1 = [2021, 'ZUEL', [1, 2, 3], ('a', 'b', 'c')]print(list1)print(list1[2])

# 列表是可变类型,元素可以修改list1[2] = [6, 6, 6]print(list1[2])

元组和列表非常相似(由一个圆括号”( )”括住),区别在于元组是不可变类型,不能添加、删除和修改元素,因此会使元组更加安全,不易被改变;并且元组中的访问和处理速度比列表更快,如果只需要对数据进行访问,而不进行任何修改,建议大家使用元组。元组和列表一样可以通过下标来索引对应的元素,如:
tuple1= (2021, 'ZUEL', [1, 2, 3], ('a', 'b', 'c'))print(tuple1)print(tuple1[2])

# 元组是不可变类型,元素不可修改tuple1[2] = [6, 6, 6]print(tuple1[2])

# 元组中的元素是可变类型时,可以修改元素的元素tuple1[2][2] = 1print(tuple1[2])

集合是一个无序不重复元素集(由一个花括号”{ }”括住),无序意味着集合不能像元组和列表一样通过下标来索引对应的元素。集合的基本功能包括关系测试和消除重复元素,其对象还支持并、交、补等运算。集合包含了不重复的所有对象,主要被用来删除数据结构中重复的元素,广泛应用于爬取网页源代码后的去重工作。需注意的是,集合是可变类型,但是集合中的元素只能是不可变类型。

# 集合可以去除重复项set1 = {1, 2, 3}set2 = {1, 2, 3, 3, 3}print(set1)print(set2)

# 集合中的元素不能是可变类型set3 = {[1, 2, 3], [4, 5, 6]}print(set3)

# 集合不能通过下标来索引对应的元素set4 = {1, 2, 3, 4, 5}print(set4[2])

结合上述内容,列表、元组和集合三者的异同如下:

(1)从定义语句来看,列表中的元素使用方括号括起来,而元组是圆括号,集合则是花括号;

(2)从元素是否有序来看,列表和元组中的元素是有序的,也就是说每一个元素都有一个明确的位置(或者说索引值);集合中的每一个元素是无序的,包含不重复的任意对象;

(3)从可以包含的元素类型来看,列表、元组都可以容纳Python中的任何对象,包括数值、字符串、元组、列表、集合、字典等,但是集合中的元素只能是不可变类型,即数值、字符串、元组等;

(4)从元素是否可变来看,列表和集合中的每一个元素都是可变的,可以在列表和集合中添加、删除和修改元素;而元组一旦初始化是不可修改的。

二、集合与列表、元组、字典、字符串的交互在使用Python的过程中,经常会有不同数据结构之间、以及不同数据结构与字符串之间相互转换的需求。由于集合是不重复的,所以通常可以对列表、元组进行去重操作。我们主要介绍以下几种交互:
# 列表转集合(去重)l1 = [1, 2, 3, 4, 4, 4]s1 = set(l1)print(s1)# 集合转列表s2 = {'a', 'b', 'c'}l2 = list(s2)print(l2)

# 元组转集合(去重)t1 = (1, 2, 3, 4, 4, 4)s1 = set(t1)print(s1)# 集合转元组s2 = {'a', 'b', 'c'}t2 = tuple(s2)print(t2)

字典的key也可以提取并转换成集合,字符串也能和集合进行交互。

# 字典转集合,提取字典的key(去重)d1 = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 4: 'd', 4: 'd'}s1 = set(d1)print(s1)

# 字符串转集合(去重)str1 = '123444's1 = set(str1)print(s1)# 集合转字符串s2 = {'a', 'b', 'c'}str2 = ''.join(s2)print(s2)

三、 遍历集合

可以通过for循环遍历集合中的元素。

set5 = {'a', 'b', 'c', 'd', 'e'}for i in set5:print(i)

由于集合是一个无序不重复元素的集,故不能直接通过下标来获取元素。在这里,我们可以通过enumerate() 函数,列出集合中的元素及元素下标。enumerate() 函数主要用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,语法结构如下:
"""enumerate(sequence, [start=0])sequence:一个序列、迭代器或其他支持迭代的对象。在这里就是集合变量start:下标起始位置"""# 遍历集合中的元素,并通过enumerate添加下标for index, data in enumerate(set5 , start=1): print(index, data)# 遍历集合中的元素,并通过enumerate添加下标for index, data in enumerate(set5 , start=1):print(index, data)

通过这种方式,我们就能够列出集合中的元素,并为每个元素添加下标。
四、集合的方法

下面我们介绍一些基本的集合方法

  • len() 可以用于获取集合元素的个数
  • add() 可以向集合中添加元素
  • update() 可以将一个集合中的元素添加到集合中去
  • remove() 可以删除集合中指定的元素
  • pop() 可以随机删除集合中的一个元素,返回被删除的元素值
  • clear() 可以清空集合
# 获取集合set6元素的个数set6 = {1, 2, 3, 4, 5, 6}set7 = {7, 8, 9}print(len(set6))# 向集合set6中添加元素"0"set6.add(0)print(set6)# 将一个集合set7中的元素添加到集合set6中去set6.update(set7)print(set6)# 随机删除集合set6中的一个元素,返回被删除的元素值set6.pop()print(set6)# 清空集合set6set6.clear()print(set6)

两个集合之间还有交、并、补运算方法,与数学中的集合运算是一致的,intersection() 或 “&”可以求两个集合的交集,union() 或 “|”可以求两个集合的并集,difference() 或 “-”可以求一个集合关于另一个集合的补集。
# 集合a和集合b的交集(intersection() 或 “&”)a = {1, 2, 3, 4}b = {3, 4, 5, 6}c1 = a.intersection(b)c2 = a & bprint(c1)print(c2)

# 集合a和集合b的并集(union() 或 “|”)a = {1, 2, 3, 4}b = {3, 4, 5, 6}c1 = a.union(b)c2 = a | bprint(c1)print(c2)

# 集合b关于集合a的补集(difference() 或 “-”)a = {1, 2, 3, 4}b = {3, 4, 5, 6}c1 = a.difference(b)c2 = a - bprint(c1)print(c2)

通过这么多的例子,小编相信大家对集合的使用方法更加熟悉了,不妨自己演练一下吧!
(END)
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




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





往期推文推荐

       Stata爬取七普人口数据

       浅析Python的序列化与反序列化

     爬虫俱乐部的精彩答疑--爬虫为何失败?

       利用Stata批量制作学生证     【数据分析-入门】科学计算基本库—Numpy的简单使用      Stata绘图系列——玩转绘图通用选项之图例     【基础篇】数据类型介绍——list、tuple和range对象

覆盖北交所的“cnstock”复工了!

高考热度大数据爬虫——谁才是院校顶流

跨框架数据操作

      河南大学经济学院2022年Stata数据处理与爬虫技术开班仪式顺利召开

爬虫俱乐部的精彩答疑——local function

爬虫俱乐部精彩答疑——Python中的三种文件读取方法爬虫俱乐部的精彩答疑--认真仔细方能写出好程序
爬虫俱乐部Python精彩答疑——更换Jupyter Notebook浏览器及dropna()参数详解
       爬虫俱乐部的精彩答疑--如何打开Excel中扩展名与文件源码不符的文件

解锁《梦华录》之东京繁华生活

爬虫俱乐部的精彩答疑——DOS命令

爬虫俱乐部的精彩答疑之换行问题

爬虫俱乐部的精彩答疑--路径设置乱码怎么破?


关于我们 


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

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。




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

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