本篇介绍一些Python中常用的方法和函数,主要是字符串,列表里面进行处理。
目录
1. str.split( str=’ ‘, num) [n]
2. re.findall ( pattern, string, flags=0 )
3. 平方根函数math.sqrt()和四舍五入函数round()
4. 排序函数list.sort()和sorted()
5. set容器:自动删除重复数据
6. 将n进制转化为十进制int( x, base=10 )
7. 字典的get方法
9. re.search( pattern, string, flags=0 )函数
1. str.split( str=’ ‘, num) [n]
第一个参数表示分割符(空格或者逗号),第二个参数表示分成几片,第三个参数n表示分割后的第几片,可以直接用。一般只有第一个参数。函数返回一个列表,里面是截取所得字符串。
一般适用于处理输入。
2. re.findall ( pattern, string, flags=0 )
返回string中所有与pattern匹配的全部字符串,返回形式为数组。
(1)用法1:搜索字母和数字时,并列即可,且有+表示截取字符串,无+表示单个字符
- import re
- str1='a587dn%#12SD2D'
- list=re.findall(r'[0-9]+',str1)
- print(list)
- list=re.findall(r'[0-9a-z]+',str1)
- print(list)
- list=re.findall(r'[A-Za-z]',str1)
- print(list)
-
- 输出:
- ['587', '12', '2']
- ['a587dn', '12', '2']
- ['a', 'd', 'n', 'S', 'D', 'D']
(2)用法2:\d—匹配0到9之间的数字;\D—匹配除0到9之外的字符
- import re
- str1='a587dn%#12SD2D'
- list=re.findall('\d',str1)
- print(list)
- list=re.findall('\d+',str1)
- print(list)
- list=re.findall('\D',str1)
- print(list)
- list=re.findall('\D+',str1)
- print(list)
-
- 输出:
- ['5', '8', '7', '1', '2', '2']
- ['587', '12', '2']
- ['a', 'd', 'n', '%', '#', 'S', 'D', 'D']
- ['a', 'dn%#', 'SD', 'D']
-
3. 平方根函数math.sqrt()和四舍五入函数round()
注意:round函数是四舍五入,int强制取整是去掉尾部。
- import math
- a=23.2314568
- print(round(a,2))
- b=25
- print(math.sqrt(b))
-
- 输出:
- 23.23
- 5.0
4. 排序函数list.sort()和sorted()
list.sort( key, reverse )是给列表排序,且只能给列表进行排序,可以排序列表中相同元素的序列,不论是数字还是字符串,只要是元素类型相同就可以排序。参数1表示排序键(只能有一个元素),参数2表示升序或者降序,reverse = True 降序, reverse = False 升序(默认)。且无返回值,是给列表本身排序。
sorted( lists, key, reverse )函数,参数1为要排序的列表,元组或者字典,参数2表示排序键,可以有多个排序键,参数3表示升序或者降序。返回值为列表。
示例1:
- list1={'adf':1,'ncv':2,'ccd':3,'cba':4}
- print(sorted(list1,reverse=True))
-
- list2=['adf','ncv','ccd','cba']
- list2.sort()
- print(list2)
-
- 输出:
- ['ncv', 'ccd', 'cba', 'adf']
- ['adf', 'cba', 'ccd', 'ncv']
示例2:多个排序键
- import operator
- list1=[('Jony','17','93'), ('Json','21 ','85'),
- ('John','20','90'),('Tom','19','80'),
- ('Jony','17','91')]
- print(sorted(list1,key=lambda list:list[2],reverse=True))
- print(sorted(list1,key=operator.itemgetter(1,2)))
-
- 输出:
- [('Jony', '17', '93'), ('Jony', '17', '91'), ('John', '20', '90'), ('Json', '21 ', '85'), ('Tom', '19', '80')]
- [('Jony', '17', '91'), ('Jony', '17', '93'), ('Tom', '19', '80'), ('John', '20', '90'), ('Json', '21 ', '85')]
总结:
(1)list.sort()只能给列表排序,且要求列表中元素类型相同,且排序键只能有一个,无返回值,是给列表本身排序;
(2)sorted()函数可以给列表,元组或者字典排序,排序键可以有多个,返回值是列表,默认排序字典为依照键排序;
(3)sorted()函数选择多个排序键时,有lambda和operator.itemgetter()两种方法。
- sorted(lists,key=lambda list:list[2])
- sorted(lists,key=operator.itemgetter(1),reverse=False) # 默认flase为升序
- sorted(lists,key=operator.itemgetter(1,2))
(4)list.sort()多多少少有一点SB,多个排序键写起来很麻烦。所以要是单纯对单元素列表进行排序可以选sort,多个排序键选sorted函数。
5. set容器:自动删除重复数据
set容器能自动删除重复数据,去掉列表或元组中重复元素,返回一个集合。
- lines='hell0 word a good moring good a'
- str1=lines.split(' ')
- print(str1)
- print(set(str1))
- list1=list(set(str1))
- list1.sort()
- print(list1)
-
- 输出:
- ['hell0', 'word', 'a', 'good', 'moring', 'good', 'a']
- {'a', 'moring', 'good', 'hell0', 'word'}
- ['a', 'good', 'hell0', 'moring', 'word']
6. 将n进制转化为十进制int( x, base=10 )
将二进制转化为十进制数字。此处使用int(x,base=10),第一个x可以是数字字符串或者数字,后面base表明前面的x是多少进制。
7. 字典的get方法
dic.get( key, default=None),其中key为要查找的键,default如果指定的键不存在,就返回该默认值。存在就返回键对应的值。
9. re.search( pattern, string, flags=0 )函数
字符串匹配函数,可与re.findall对比学习。第一个参数是匹配的模式字符串,第二个为传入的字符串,第三个flag为标志位,控制匹配方式,如是否区分大小写等。
(1)匹配想要的字符串
匹配字符串可以是单个字符,也可以是字符串,返回的是起始位置,查询到第一个满足条件的返回下表,不再继续查询。
- import re
- str1='123@#$sddcSD'
- n1=re.search('[a-z]',str1)
- n2=re.search('[%$#]',str1)
- n3=re.search('ddc',str1)
- print(n1)
- print(n2)
- print(n3)
-
- 输出:
- <re.Match object; span=(6, 7), match='s'>
- <re.Match object; span=(4, 5), match='#'>
- <re.Match object; span=(7, 10), match='ddc'>
(2)匹配若干个字符串,使用+
注意此时span( start, end )表示符合的开始和中止位置,group表示符合的字符串。都是找到第一个符合要求的就返回。
- import re
- str1='123@#$sddcSD12'
- n1=re.search('[a-z]+',str1)
- n2=re.search('[%$#]+',str1)
- n3=re.search('\d+',str1)
- n4=re.search('\D+',str1)
- print(n1.group())
- print(n3.span())
- print(n4.span()[0])
- print(n4.span()[1])
-
- 输出:
- sddc
- (0, 3)
- 3
- 12
(3)匹配一长串,按元素类型顺序
匹配先是小写字母,接数字,再接小写字母的字符串,同时使用group来选择匹配第几个要素的。group()与group(0)等价,都是全匹配。
- import re
- str1='kj123acbSD12'
- rex_compile=re.compile('([a-z]*)([0-9]*)([a-z]*)')
- rex=rex_compile.search(str1)
- print(rex)
- print(rex.group())
- print(rex.group(0))
- print(rex.group(1))
- print(rex.group(2))
-
- 输出:
- <re.Match object; span=(0, 8), match='kj123acb'>
- kj123acb
- kj123acb
- kj
- 123
总结:
(1)re.search函数从头开始寻找,找到第一个符合的,就可以直接返回下标;
(2)findall函数找到所有符合的字符串,以列表形式返回;