【数据结构】集合的使用方法
本文作者:万 浩,中南财经政法大学统计与数学学院
本文编辑:刘光中
技术总编:王玉婷
Stata&Python云端课程来啦!
好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程,Stata进阶课程和Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
Python有4种内建的数据结构,分别是列表(list)、元组(tuple)、字典(dict)、集合(set),每种数据结构都有自己的特点,并且都有着独到的用处。在本篇推文中,我们主要介绍集合和列表、元组的异同和交互,遍历集合中的元素以及集合的基本方法。
一、列表、元组和集合的异同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] = 1
print(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)从元素是否可变来看,列表和集合中的每一个元素都是可变的,可以在列表和集合中添加、删除和修改元素;而元组一旦初始化是不可修改的。
# 列表转集合(去重)
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(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)
# 清空集合set6
set6.clear()
print(set6)
# 集合a和集合b的交集(intersection() 或 “&”)
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
c1 = a.intersection(b)
c2 = a & b
print(c1)
print(c2)
# 集合a和集合b的并集(union() 或 “|”)
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
c1 = a.union(b)
c2 = a | b
print(c1)
print(c2)
# 集合b关于集合a的补集(difference() 或 “-”)
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
c1 = a.difference(b)
c2 = a - b
print(c1)
print(c2)
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
浅析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)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可
以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。