查看原文
其他

Python常见内置函数用法(二)

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

本文作者:孙雪丽

文字编辑:杨慧琳

技术总编:张学人

重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束。另外爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训,仍在火热招生中,点击文章末尾查看原文,查看培训详细信息。


今天,我们接着《Python常见内置函数用法(一)》,继续为大家介绍Python常用的内置函数。

1、filter()函数

该函数用于过滤序列,过滤掉序列中不符合条件的元素,返回由符合条件元素组成的新序列。常见的序列有列表、元组、集合、字符串等。

语法:filter(function,iterable)

filter()函数接受两个参数,第一个参数为过滤函数,第二个参数为一个过滤序列或可迭代对象。filter()会将过滤函数依次作用于过滤序列中的每一个元素,返回一个由符合过滤函数的元素组成的可迭代对象。下面我们以两个简单的小例子来了解filter()函数的用法。

例1、筛选出1-10中的偶数

def is_even(n): #定义一个判断奇偶数的过滤函数 return n % 2 == 0 even = list(filter(is_even, range(1,11)))even

程序中,range()函数创建了一个整数列表,这个列表从1开始(包括1),到11结束(不包括11),步长默认为1。filter()函数将range(1,11)中的数依次传入过滤函数is_even中,并将is_even函数中返回值为True的元素保留在filter对象中,最后通过list()函数将这一对象列表化。结果如下:

例2、筛选出首字母为p的单词

import redef start_p(string): #定义过滤函数 return re.findall('^p',string)st = ['apple','banana','pear','pineapple','orange','peach']fil = list(filter(start_p, st))fil

运行过程同例1,稍有不同的是filter()中的第二个参数为一个事先定义的过滤序列st,运行结果如下:

2、format()函数

format()是一种格式化字符串或数字的函数。它可以接收任意个参数,且各个参数的位置可随意。其特点是通过一对花括号”{}”调用format()中的各参数且可在花括号中设置调用参数的显示格式,从而实现一系列对字符串或数字的操作。我们首先介绍调用format()参数的几种方法,其次介绍如何设置调用参数的显示格式。

2.1 调用format()参数的方法

♦ 通过参数位置调用

顾名思义,通过参数位置进行调用的方法就是在花括号”{}”中输入所需参数在format()函数中的位置,参数位置从0开始。示例如下:

'我叫{2},今年{1}岁,在{0}上学'.format('人民路小学',18,'喜小乐')

♦ 通过参数关键字调用

通过参数关键字调用的方法是指为format()函数中的各参数设置关键字,在调用时仅需在花括号”{}”中输入相应参数的关键字即可,此时参数的位置不再重要。示例如下:

'我叫{name},今年{age}岁,在{school}上学'.format(school='人民路小学',age=18,name='喜小乐')

'我叫{2},今年{1}岁,在{0}上学'即所要输出的字符串,在这个字符串中,又通过{#}调用format()函数中第#号位置的参数。当花括号中不做任何设置时,会按照参数的默认顺序进行调用。

'我叫{},今年{}岁,在{}上学'.format('人民路小学',18,'喜小乐')

♦ 通过映射列表调用

映射列表的做法是指,事先定义一个列表,将列表名称作为format()函数的参数,在花括号中调用时不仅要输入列表在参数中的位置,还需输入所调用内容在列表中的位置。示例如下:

list1 = ['鸡小萌',18,'人民路中学']'{0},我叫{1[0]},今年{1[1]}岁,在{1[2]}上学'.format('大家好',list1)

♦ 通过映射字典调用

映射字典的做法同样需要事先定义一个字典,并将字典名称作为format()函数的参数,在花括号中输入字典中的key可调用相应的value值。示例如下:

dict1 = {'name':'鸡小萌','age':18,'school':'人民路中学'}'我叫{name},今年{age}岁,在{school}上学'.format(**dict1)

2.2 设置调用参数的格式

我们不仅可以在花括号”{}”中调用参数,还可设置参数的显示格式。对于字符串参数,可以设置参数的对齐方式以及填充方式;对于数字参数,还可设置数字的精度与类型、显示格式(百分比格式、指数格式、正负号等)、进制转换等等。我们先来了解设置格式的常用符号:

^、<、> 分别是居中、左对齐、右对齐,后面带宽度。

: 后面带填充字符,只能是一个字符,不指定的话默认为空格。

f 表示浮点数

.#f 设置浮点数的精度,#为一自然数。

d 表示十进制整数,将数字以10为基数进行输出

% 表示百分数,将数值乘以100输出,值后面会有一个百分号

e 表示幂符号,用科学计数法打印数字, 用’e’表示幂。

+ 表示带符号输出。

接下来我们以示例来介绍上述符号的具体用法。

♦ 填充与对齐

print('{:*^30}'.format('一年1班成绩表')) # :* 表示以*号填充,^30 表示居中对齐,且宽度为30 print('{name:^10} {age:^10d} {grade:>10.2f}'.format(name='鸡小萌',age=16,grade=533.2588))print('{name:^10} {age:^10d} {grade:>10.2f}'.format(name='石敢当',age=17,grade=668.765))print('{name:^10} {age:^10d} {grade:>10.2f}'.format(name='喜小乐',age=18,grade=324.567))

以”{grade:>10.2f}”为例解释括号中数字及符号的含义:’grade’为所要调用的关键字参数;’:’ 指定填充方式,其后没有指定填充字符默认以空格填充;’>10’ 表示右对齐且宽度为10;’.2f’ 表示精度,保留两位有效数字,保留整数时可设置为’.0f’。

♦ 数字格式化输出

假定有如下三个列表:

list1 = [2,31.48,0.43,1200000000]list2 = [1872,20.1,-0.87,234840000]list3 = [600606,7.83,-0.46,113000000]

分别代表了3支股票的部分信息,列表元素依次为股票代码、价格、收益率、市值。我们想要将其格式化输出,具体要求为:在不足6位的股票代码前补0;价格保留两位有效数字;收益率转化为百分比形式且保留收益率前的符号;市值转化为指数形式。代码如下:

print('{:^6} {:^8} {:^8} {:^10}'.format('stkcd','price','Rit','value'))print('{0[0]:0>6} {0[1]:^8.2f} {0[2]:^+.1%} {0[3]:^15.2e}'.format(list1))print('{0[0]:0>6} {0[1]:^8.2f} {0[2]:^+.1%} {0[3]:^15.2e}'.format(list2))print('{0[0]:0>6} {0[1]:^8.2f} {0[2]:^+.1%} {0[3]:^15.2e}'.format(list3))

输出结果如下:

通过两个小例子大家对这些符号有没有一些初步的印象呢?设置显示格式的符号多且易混淆,还需要读者在实际操作中多运用才能深刻理解这些符号的含义。

3、hasattr()函数

hasattr()是一个判断对象中是否包含特定属性的内置函数,其语法为:

hasattr(object,name)

可见hasattr()函数有两个参数:object和name,它用于判断对象object中是否含有属性name,有则返回True,没有则返回False,且hasattr()函数实际上是调用getattr(object,name)函数通过捕捉Attribute Error进行判断的。如下例:

class Example(): name="xiaohua" def run(self): return "HelloWord"t = Example() #实例化一个对象print(hasattr(t, "name")) #判断name属性是否存在print(hasattr(t, "age")) #判断age属性是否存在print(hasattr(t, "run")) #判断方法run是否存在

运行结果如下:

我们判断了对象t中是否包含属性name、age和方法run,显而易见判断结果为True、False、True。

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

往期推文推荐

关于我们

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

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

投稿邮箱:statatraining@163.com

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

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

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