重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
8个超好用内置函数set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
创新互联网站建设公司是一家服务多年做网站建设策划设计制作的公司,为广大用户提供了成都网站设计、网站制作,成都网站设计,1元广告,成都做网站选创新互联,贴合企业需求,高性价比,满足客户不同层次的需求一站式服务欢迎致电。
python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率。
这次来梳理下8个好用的python内置函数
1、set()
当需要对一个列表进行去重操作的时候,set()函数就派上用场了。
用于创建一个集合,集合里的元素是无序且不重复的。集合对象创建后,还能使用并集、交集、差集功能。
2、eval()之前有人问如何用python写一个四则运算器,输入字符串公式,直接产生结果。用eval()来做就很简单:eval(str_expression)作用是将字符串转换成表达式,并且执行。
3、sorted()在处理数据过程中,我们经常会用到排序操作,比如将列表、字典、元组里面的元素正/倒排序。这时候就需要用到sorted() ,它可以对任何可迭代对象进行排序,并返回列表。对列表升序操作:
对元组倒序操作:
使用参数:key,根据自定义规则,按字符串长度来排序:
根据自定义规则,对元组构成的列表进行排序:
4、reversed()如果需要对序列的元素进行反转操作,reversed()函数能帮到你。reversed()接受一个序列,将序列里的元素反转,并最终返回迭代器。
5、map()做文本处理的时候,假如要对序列里的每个单词进行大写转化操作。这个时候就可以使用map()函数。
map()会根据提供的函数,对指定的序列做映射,最终返回迭代器。也就是说map()函数会把序列里的每一个元素用指定的方法加工一遍,最终返回给你加工好的序列。举个例子,对列表里的每个数字作平方处理:
6、reduce()前面说到对列表里的每个数字作平方处理,用map()函数。那我想将列表里的每个元素相乘,该怎么做呢?这时候用到reduce()函数。
reduce()会对参数序列中元素进行累积。第一、第二个元素先进行函数操作,生成的结果再和第三个元素进行函数操作,以此类推,最终生成所有元素累积运算的结果。再举个例子,将字母连接成字符串。
你可能已经注意到,reduce()函数在python3里已经不再是内置函数,而是迁移到了functools模块中。这里把reduce()函数拎出来讲,是因为它太重要了。
7、filter()一些数字组成的列表,要把其中偶数去掉,该怎么做呢?
filter()函数轻松完成了任务,它用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象。filter()函数和map()、reduce()函数类似,都是将序列里的每个元素映射到函数,最终返回结果。我们再试试,如何从许多单词里挑出包含字母w的单词。
8、enumerate()这样一个场景,同时打印出序列里每一个元素和它对应的顺序号,我们用enumerate()函数做做看。
enumerate翻译过来是枚举、列举的意思,所以说enumerate()函数用于对序列里的元素进行顺序标注,返回(元素、索引)组成的迭代器。再举个例子说明,对字符串进行标注,返回每个字母和其索引。
题主你好,
首先, plt是官网推荐的对matplotlib.pyplot的缩写,即在python中通常有语句:
import matplotlib.pyplot as plt
其次, figtext()函数的作用是在图中添加文本信息,而函数中的参数,则是设置所添加文本的 位置 | 文本内容 | 字体 | 字体大小 | 对齐 等等,详细的参数可参照网址:
------------
下面我们看一下figtext()函数的定义:
可以看出, x,y,s这三个参数是你调用时必传的, 其中:
x表示横坐标;
y表示纵坐标;
s表示要添加的文本内容;
*.需要注意的是,默认情况下x,y坐标的取值范围都是0到1
---------
下面来看题主的问题:
plt.figtext(0.2, 1 - i * 0.02, '%.5f' % angle, ha='center', va='bottom', fontsize=7)
其中头三个参数,按照上面说的对照一下:
0.2: 表示横坐标;
1-i*0.02: 表示纵坐标;
'%.5f' % angle: 表示要添加的文本内容, angle是变量名, %.5f表示将变量angle格式化为浮点数,并保留小数点后5位(如果有多位,则小数点后5位会4舍5入),举例来说:
a. '%.5f'%3 得到的结果是 3.00000;
b. '%.5f'%3.141356得到的结果是 3.14136;
后面还有三个参数:
ha: 这是horizantal alignment的缩写,说白了就是" 水平对齐方式 "
va: 这是vertical alignment的缩写, 说白了就是" 垂直对齐方式 "
fontsize: 这个即字面意思,即" 文本字体大小 "
*.关于figtext()函数, 官网给了两个例子,题主可以参考一下: 还是上面给的那个链接, 拉到最底下有两个例子的超链接, 点进去就可以看到样例代码及运行效果图:
希望可以帮到题主, 欢迎追问.
01 Re概览
Re模块是python的内置模块,提供了正则表达式在python中的所有用法,默认安装位置在python根目录下的Lib文件夹(如 ..\Python\Python37\Lib)。主要提供了3大类字符串操作方法:
字符查找/匹配
字符替换
字符分割
由于是面向字符串类型的模块,就不得不提到字符串编码类型。re模块中,模式串和搜索串既可以是 Unicode 字符串 (常用str类型) ,也可以是8位字节串 (bytes,2位16进制数字,例如\xe5) , 但要求二者必须是同类型字符串。
02 字符串查找/匹配
预编译:compile
在介绍查找和匹配函数前,首先需要知道re的compile函数,该函数可以将一个模式串编译成正则表达式类型,以便后续快速匹配和复用
import re pattern = re.compile(r'[a-z]{2,5}') type(pattern) #re.Pattern
此例创建了一个正则表达式式对象 (re.pattern) ,命名为pattern,用于匹配2-5位小写字母的模式串。后续在使用其他正则表达式函数时,即可使用pattern进行方法调用。
匹配:match
match函数用于从文本串的起始位置开始匹配,若匹配成功,则返回相应的匹配对象,此时可调用group()方法返回匹配结果,也可用span()方法返回匹配起止下标区间;否则返回None
import re pattern = re.compile(r'[a-z]{2,5}') text1 = 'this is a re test' res = pattern.match(text1) print(res) # if res: print(res.group()) #this print(res.span()) #(0, 4) text2 = '是的, this is a re test' print(pattern.match(text2))#None
match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配时,返回一个匹配对象,否则返回None
搜索:search
match只提供了从文本串起始位置匹配的结果,如果想从任意位置匹配,则可调用search方法,与match方法类似,当任意位置匹配成功,则立即返回一个匹配对象,也可调用span()方法获取起止区间、调用group方法获得匹配文本串
import re pattern = re.compile(r'\s[a-z]{2}') text1 = 'this is a re test' res = pattern.search(text1) print(res) # if res: print(res.group()) #is print(res.span()) #(4, 7) pattern2 = re.compile(r'\s[a-z]{5}') text2 = '是的,this is a re test' print(pattern2.search(text2))#None
match和search均用于匹配单个结果,唯一区别在于前者是从起始位置开始匹配,而后者从任意位置匹配,匹配成功则返回一个match对象。
全搜索:findall/finditer
几乎是最常用的正则表达式函数,用于寻找所有匹配的结果,例如在爬虫信息提取中,可非常方便地提取所有匹配字段
import re pattern = re.compile(r'\s[a-z]{2,5}') text1 = 'this is a re test' res = pattern.findall(text1) print(res) #[' is', ' re', ' test']
findall返回的是一个列表对象类型,当无匹配对象时,返回一个空列表。为了避免因同时返回大量匹配结果占用过多内存,可以调用finditer函数返回一个迭代器类型,其中每个迭代元素是一个match对象,可继续调用group和span方法获取相应结果
import re pattern = re.compile(r'\s[a-z]{2,5}') text1 = 'this is a re test' res = pattern.finditer(text1) for r in res: print(r.group()) """ is re test """
当匹配模式串较为简单或者仅需单词调用时,上述所有方法也可直接调用re类函数,而无需事先编译。此时各方法的第一个参数为模式串。
import re pattern = re.compile(r'\d{2,5}') text = 'this is re test' re.findall('[a-z]+', text) #['this', 'is', 're', 'test'] 03 字符串替换/分割
替换:sub/subn
当需要对文本串进行条件替换时,可调用re.sub实现 (当然也可先编译后再用调用实例方法) ,相应参数分别为模式串、替换格式、文本串,还可以通过增加缺省参数限定替换次数和匹配模式。通过在模式串进行分组,可实现字符串的格式化替换(类似字符串的format方法),以实现特定任务。
import re text = 'today is 2020-03-05' print(re.sub('-', '', text)) #'today is 20200305' print(re.sub('-', '', text, 1)) #'today is 202003-05' print(re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)) #'today is 03/05/2020'
re.sub的一个变形方法是re.subn,区别是返回一个2元素的元组,其中第一个元素为替换结果,第二个为替换次数
import re text = 'today is 2020-03-05' print(re.subn('-', '', text)) #('today is 20200305', 2)
分割:split
还可以调用正则表达式实现字符串的特定分割,相当于.split()方法的一个加强版,实现特定模式的分割,返回一个切割后的结果列表
import re text = 'today is a re test, what do you mind?' print(re.split(',', text)) #['today is a re test', ' what do you mind?'] 04 总结
python中的re模块提供了正则表达式的常用方法,每种方法都包括类方法调用(如re.match)或模式串的实例调用(pattern.match)2种形式
常用的匹配函数:match/fullmatch
常用的搜索函数:search/findall/finditer
常用的替换函数:sub/subn
常用的切割函数:split
还有其他很多方法,但不是很常用,具体可参考官方文档
另外,python还有第三方正则表达式库regex可供选择
到此这篇关于一文秒懂python正则表达式常用函数的文章就介绍到这了,希望大家以后多多支持!
在 pandas 中,存储文本主要有两种方式
但一般建议使用 StringDtype 类型存储文本数据。都是由于各种原因,现在字符串数据的默认存储类型还是 object 。
要存储为 string 类型,需要显式的设置 dtype 参数
或者在创建 Series 或 DataFrame 之后,使用 astype 转换类型
也可以使用 StringDtype/"string" 转换其他非字符串类型的数据
转换现有数据的类型
StringDtype 类型对象与 object 类型之间存在一些差异
两个结果的输出都是 Int64 类型。将其与 object 类型比较
当存在 NA 值时,输出为 float64 。类似地,对于返回布尔值的方法
Series 和 Index 有一套字符串处理方法,可以方便地对数组的每个元素进行操作,最重要的是,这些方法会自动忽略缺失值。
这些方法可以通过 str 属性访问,通常具有与内置字符串方法相匹配的名称
Index 上的字符串方法对于清理或转换 DataFrame 的列特别有用。
例如,您可能有带有前导或后置空格的列
因为 df.columns 是一个 Index 对象,所以我们可以使用 .str 访问器
我们可以根据需要对列名进行处理,然后重新设置列名。
例如,我们删除列名的前后空格,并将其改为小写字母,同时用 _ 替换剩余的空格
split 方法会返回一个值为 list 的 Series
可以使用 get 或 [] 访问拆分后的列表中的元素
更简单的方法是设置 expand 参数,返回一个 DataFrame
当原来的 Series 包含 StringDtype 类型的数据时,输出列也将全部为 StringDtype
当然,也可以设置切割次数
它还有个对应的 rsplit 方法,从右边起始对字符串进行拆分
replace 参数支持使用正则表达式,前两个参数是 pat (匹配模式) 和 repl (替换字符串)
如果只是想要替换字符串字面值,可以将 regex 参数设置为 False ,而不需要对每个特殊字符进行转义。此时 pat 和 repl 参数必须是字符串
此外, replace 方法还接受一个可调用的替换函数,会使用 re.sub() 方法在每个匹配的模式上调用该函数
该函数需要传入一个正则对象作为位置参数,并返回一个字符串。例如
replace 方法的 pat 参数还接受 re.compile() 编译的正则表达式对象。所有的 flags 需要在编译正则对象时设置
如果在 replace 中设置 flags 参数,则会抛出异常
有几种方法可以将一个 Series 或 Index 与自己或其他的 Series 或 Index 相连接,所有这些方法都是基于 cat() 方法
可以连接一个 Series 或 Index 的内容
如果未指定 sep 参数,则默认为空字符串
默认会跳过缺失值,也可以使用 na_rep 指定缺失值的表示方式
cat() 的第一个参数 others 可以是类似列表的对象,但是其长度需要和调用对象一致
只要两个对象中存在缺失值,对应的结果中也是缺失值,除非指定了 na_rep
others 参数也可以是二维的,但是得保证其行数必须与调用的对象一致
对于 Series 或 DataFrame 的连接,可以通过设置 join 参数指定对齐方式
通常 join 可选范围为: 'left' , 'outer' , 'inner' , 'right' 。此时,不再要求两个对象长度一致
当 others 参数是 DataFrame 时,也可以使用
可以将一些类似数组的对象(如 Series , Index 等)放在一个类似列表的容器中,然后传递给 cat
对于没有索引的对象,其长度必须与调用 cat 的对象相同。但是 Series 和 Index 可以是任意的,除非设置了 json=None 。
如果在 others 参数上包含不同索引的对象,且设置了 join='right' ,则最后的结果将会是这些索引的并集