本文作者:钱梦璇
文字编辑:余术玲
技术总编:张 邯
爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~
详细培训大纲及报名方式,请点击文末阅读原文呦~
在昨天的推文中,我们介绍了数值型算术运算符以及abs( )、divmod()、pow( )和round() 四种数值型内置函数的应用,大家现在能否回忆起来呢?
承接上篇文章,今天小编要单独介绍两位重量级嘉宾——max( )函数和min()函数!麻雀虽小,五脏俱全,它们的应用可谓是十分广泛。
max( )函数和min()函数分别返回给定多个参数中的最大或最小值,或者传入的可迭代对象中元素的最大或最小值。它们的语法结构为:
min(arg1,arg2,*args[,key])或者min(iterable,*[,key,default])
max(arg1,arg2,*args[,key])或者max(iterable,*[,key,default]),
其中arg表示给定的多个参数,key参数是用来指定取最大或最小值的方法,是一个函数名,它可以是内置函数,也可以是自定义函数或者第三方库中的函数,iterable表示传入的可迭代对象(可以简单地理解为可以直接作用于for...in循环的对象,比如字符串,列表,字典,元组等),default参数是用来指定最大或最小值不存在时返回的默认值。需要注意的是,max( )和min( )函数都至少传入两个参数,当只传入一个参数时,此参数必须为可迭代对象。
1. 简单情况一:传入多个参数
(1)取不同数值中的最大值:
In [1]: max(-8,3,7)Out[1]: 7
(2)取不同列表中的最小值,先比较每个列表中的第一个元素,再比较列表中的第二个元素:
In [2]: min([5,2],[4,6],[4,7])Out[2]: [4, 6]
先比较列表[5,2],[4,6],[4,7]内的第一个元素5、4,明显5>4,因此[5,2]最大,再比较[4,6]和[4,7]中第二个元素,明显6<7,因此[4,6]最小。
2. 简单情况二:传入可迭代对象
(1)当可迭代对象为字符串时:
In [3]: min('abcd')Out[3]: 'a'
(2)当可迭代对象为列表时:
In [4]: max([5,8,3,7])Out[4]: 8
(3)当可迭代对象为字典时,先比较字典中值的大小,再返回对应的键:(例如,在一个含有5名学生和他们对应身高的字典里,快速找到最高和最低的学生)
In [5]:height={'Linda':168,'Tom':180,'Hans':175,'Kevin':178,'Angel':165}print("max(height):",max(height))print("min(height):",min(height))max(height): Tommin(height): Angel
3. key参数的应用
如果key参数存在时,就以key的函数对象作为判断的标准。
(1)利用上篇文章中的绝对值函数abs( ),取一组数中绝对值最大的:
In [6]:absm=max(-2,4,-8,key=abs)absmOut[6]: -8
利用len( )函数,取一组字符串中长度最小的:
In [7]:lenm=min('fdfan','jfny','abc','hm',key=len)lenmOut[7]: 'hm'
(2)key参数对应的函数不一定非是内置的,还可以是自定义的,只要返回的是可比较对象就可以。
In [8]:def hahaha(i):return i+2a=[2,4,1,6]max(a,key=hahaha)Out[8]: 6
定义一个函数“hahaha()”和可迭代列表a,将a中的元素带入函数,比较返回值i+2的大小,即2+2,4+2,1+2,6+2的大小,显然6+2=8最大,最终返回列表a中的元素6。
In [9]:def lalala(i):if i>2:return[1,2]else:return[3,4]a=[2,3,2,4]max(a,key=lalala)Out[9]: 2
同上,将a中的元素带入函数“lalala()”,当元素为2时函数返回[3,4],当元素为3或4时函数返回[1,2],即使返回的是列表,只要是可比较的对象,max()和min()函数依然能给出对应的结果。在这里明显[3,4]更大,故最终返回值为2。需要注意的是,虽然列表a的第一个和第三个元素都为2,但是返回的是第一个元素2,因为max()函数默认返回的是首先取得最大的元素。
在一些情况下,key参数往往配合lambda(python中的黑魔法之一,实质也就是函数)进行处理。例如,每种水果的价格信息以字典的形式存放在列表中,要找出最便宜和最贵的水果:
In[10]:fruit_price=[{'name':'mango','price':'6.49'},{'name':'orange','price':'4.31'},{'name':'banana','price':'3.25'},{'name':'Cherry','price':'9.98'}]cheap=min(fruit_price,key=lambdax:x['price'])expensive=max(fruit_price,key=lambdax:x['price'])print("最便宜的水果是:",cheap)print("最贵的水果是:",expensive)最便宜的水果是:{'name': 'banana','price': '3.25'}最贵的水果是:{'name': 'Cherry','price': '9.98'}
(3)key参数的另一个作用是,当不同类型的对象不可以通过比较取得最大值时,传入合适的key函数可以解决这个问题。
In [11]: max(2,5,'6')#数值和字符串无法比较Traceback (most recent call last):File "<ipython-input-35-39b69cbc3da6>", line 1, in <module>max(2,5,'6')TypeError: '>' not supported between instances of 'str' and 'int'In [12]: max(2,5,'6',key=int)#当指定key参数时,可以进行比较取最大值Out[12]: '6'
4. default参数的应用
In [13]: min(( )) #可迭代对象为空时无法取最小值Traceback (most recent call last):File "<ipython-input-37-2a4cd902ae8f>", line 1, in <module>min(( ))ValueError: min() arg is an empty sequence
default参数指定当最大值或最小值不存在时,返回的默认值。
In [14]: min(( ),default=5) #指定返回的默认值为5Out[14]: 5

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
万般进制千机变,Python一计乾坤定——利用Python来进行进制转换
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


