Python常见内置函数(一)
本文作者:张欣怡,中南财经政法大学统计与数学学院
本文编辑:胡艺粼
技术总编:孙一博
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~引言
在Python中,有很多与序列相关的内置函数,用于处理和分析数据。本文将介绍sorted()、enumerate()、zip()、reversed()等常见内置函数,让我们一起来看看具体的用法吧。
一、sorted()
sorted()函数可以对任意序列的元素进行排序,返回一个新的有序序列。
sorted([9,4,5,0])
sorted('python')
利用sorted()函数对可迭代的对象进行排序,并通过参数key确定排序的依据;参数reverse确定升降序的方式,默认为升序排列。
sorted(iterable, /, *, key=None, reverse=False)
下面我们来看一个具体的例子,以字典中的键值对key、value作为迭代对象,并按照字典内容value进行排列。
scores={'张三':45,'李四':89,'王五':76}
print(sorted(scores.items(),key=lambda i:i[1],reverse=True))
输出结果如下:
需要注意的是我们以scores.items()为迭代对象,可以同时输出字典中的键值对。如果直接将scores作为迭代对象,输出的结果将以字典key值排序,而不是我们所希望的以字典内容value排序。在这个例子中,排序依据为lambda,用i[1]表示value,并按照降序进行排列。
二、enumerate()
在对象迭代时,enumerate()函数可以对相应对象:迭代器或者列表、元组等序列进行枚举,下标起始位置默认从0开始。
enumerate(sequence,[start=0])
以列表为例进行枚举,利用enumerate()返回枚举对象,我们可以改变下标起始位置。
list1 = ['python','and','stata']
list2 = list(enumerate(list1,start=1))#下标起始位置为1
list2
索引数据时,通过enumerate返回序列所映射位置的值,一般通过for循环实现,可以同时获得索引和值。
lists = ['python','and','stata']
dicts = { } #创建空字典
for i,values in enumerate(lists):
dicts[values] = i
dicts
num = len(open(filepath,'r').read.lines())
num = 0
for i,lines in enumerate(open(filepath,'r')):
num += 1
上述两种方法均可以用于统计文件中的行数。不同的是第一种方法虽然简单,但是运行速度较慢,而使用enumerate()函数可以解决这种缺陷。第二种方法借助内置函数实现快速统计,适用于文件较大的情况。
三、zip()
zip()函数可以将迭代对象作为参数,该迭代对象可以是Python中的数据结构,例如元组、列表、字典、集合。
zip(*iterables)
zip()函数将多个序列对组合成一个新的序列,聚合传入每个序列中相同位置的元素。
list1 = ['爬虫','python']
list2 = ['俱乐部','stata']
list(zip(list1,list2))
list3 = [0,1,2,3,4]
list4 = [7,8,9]
list5 = ['python','stata']
list(zip(list3,list4,list5))
使用zip()函数时,序列中元素的个数取决于最短的序列,且可以同时组合多个序列。在这个例子中,我们利用zip()函数将三个列表组合成一个新的列表,且列表中元素的个数为2,这取决于最短的列表list5。
下面以学生信息管理的例子介绍zip()函数的实际应用。
def studentInformation():
students=[]
id_student=input('请输入学号:')
name_student=input('请输入姓名:')
gender_student=input('请输入性别:')
id_list=id_student.split(' ')
name_list=name_student.split(' ')
gender_list=gender_student.split(' ')
information=zip(id_list,name_list,gender_list)
for values in information:
dictinfo={'学号':values[0],'姓名':values[1],'性别':values[2]}
students.append(dictinfo)
pass
for values in students:
print(values)
pass
studentInformation()
请输入学号:10 11 12
请输入姓名:张三 李四 王五
请输入性别:男 女 男
输出结果为:
运行上述程序,我们需要分别输入学号、姓名、性别等信息并形成相关的列表,使用zip()函数将这些列表组合,结合循环语句就能够输出我们想要的每一个学生信息。
四、reversed()
reversed()函数可以从后向前迭代,对序列中的元素进行反向排序,一般用于需要翻转的序列。
reversed(sequence, /)
可以转换的序列包括列表、元组、字符串和range()函数。
#列表
list(reversed([1,2,3,4,5]))
#元组
list(reversed((6,7,8,9,10)))
#字符串
list(reversed('string'))
#range()
list(reversed(range(10)))
输出结果为:
reversed()函数同样可以应用于for循环来迭代序列。
list1 = [1,2,3,4,5]
for list2 in reversed(list1):
print(list2)
输出结果为:
以上与序列相关的内置函数根据各自的定义,可以结合使用。
例如,zip()可以和enumerate()结合使用,同时迭代多个序列:
list1 = ['爬虫','python']
list2 = ['俱乐部','stata']
for i,(a,b) in enumerate(zip(list1,list2)):
print(i,a,b)
使用zip()将range()和reversed()生成的内容组合:
dicts = dict(zip(range(5),reversed(range(10))))
dicts
如果我们需要将两个列表合并,同时进行排序,就可以将zip()与sorted()结合使用:
list1=[4,2,1,3]
list2=['d','c','b','a']
sorted(zip(list1,list2)) #按照list1进行排序
以上是对sorted()、enumerate()、zip()、reversed()等常见内置函数的介绍,大家一起灵活应用起来吧。
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐 Stata绘图系列——饼形图绘制【爬虫实战】深交所服务业年报数据
“挂羊头卖狗肉”?
Python与excel交互--xlsxwriter模块cnmapsearch——离公司最近的快餐店在哪
Python中的异常处理 Python交互式数据可视化——酷炫的Altair库 hk系列命令(3)—— hktrade hk系列命令(2)—— hkar hk系列命令(1)—— hkstock 超好用的字符串方法 基于Python的假设检验实现Stata与MySQL交互--基础操作 Jupyter Notebook中的魔术命令《Stata正则表达式》由中国金融出版社出版发行 匿名函数lambda到底怎么用?Stata绘图系列—NBER Working paper仿图Camelot:从PDF中提取表格数据关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。