2022年 11月 9日

【python编程】常用的方法和函数

本篇介绍一些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:搜索字母和数字时,并列即可,且有+表示截取字符串,无+表示单个字符

  1. import re
  2. str1='a587dn%#12SD2D'
  3. list=re.findall(r'[0-9]+',str1)
  4. print(list)
  5. list=re.findall(r'[0-9a-z]+',str1)
  6. print(list)
  7. list=re.findall(r'[A-Za-z]',str1)
  8. print(list)
  9. 输出:
  10. ['587', '12', '2']
  11. ['a587dn', '12', '2']
  12. ['a', 'd', 'n', 'S', 'D', 'D']

(2)用法2:\d—匹配0到9之间的数字\D—匹配除0到9之外的字符

  1. import re
  2. str1='a587dn%#12SD2D'
  3. list=re.findall('\d',str1)
  4. print(list)
  5. list=re.findall('\d+',str1)
  6. print(list)
  7. list=re.findall('\D',str1)
  8. print(list)
  9. list=re.findall('\D+',str1)
  10. print(list)
  11. 输出:
  12. ['5', '8', '7', '1', '2', '2']
  13. ['587', '12', '2']
  14. ['a', 'd', 'n', '%', '#', 'S', 'D', 'D']
  15. ['a', 'dn%#', 'SD', 'D']

3. 平方根函数math.sqrt()和四舍五入函数round()

注意:round函数是四舍五入,int强制取整是去掉尾部。

  1. import math
  2. a=23.2314568
  3. print(round(a,2))
  4. b=25
  5. print(math.sqrt(b))
  6. 输出:
  7. 23.23
  8. 5.0

4. 排序函数list.sort()和sorted()

list.sort( key, reverse )是给列表排序,且只能给列表进行排序,可以排序列表中相同元素的序列,不论是数字还是字符串,只要是元素类型相同就可以排序。参数1表示排序键(只能有一个元素),参数2表示升序或者降序,reverse = True 降序, reverse = False 升序(默认)。且无返回值,是给列表本身排序

sorted( lists, key, reverse )函数,参数1为要排序的列表,元组或者字典,参数2表示排序键,可以有多个排序键,参数3表示升序或者降序。返回值为列表

示例1:

  1. list1={'adf':1,'ncv':2,'ccd':3,'cba':4}
  2. print(sorted(list1,reverse=True))
  3. list2=['adf','ncv','ccd','cba']
  4. list2.sort()
  5. print(list2)
  6. 输出:
  7. ['ncv', 'ccd', 'cba', 'adf']
  8. ['adf', 'cba', 'ccd', 'ncv']

示例2:多个排序键

  1. import operator
  2. list1=[('Jony','17','93'), ('Json','21 ','85'),
  3. ('John','20','90'),('Tom','19','80'),
  4. ('Jony','17','91')]
  5. print(sorted(list1,key=lambda list:list[2],reverse=True))
  6. print(sorted(list1,key=operator.itemgetter(1,2)))
  7. 输出:
  8. [('Jony', '17', '93'), ('Jony', '17', '91'), ('John', '20', '90'), ('Json', '21 ', '85'), ('Tom', '19', '80')]
  9. [('Jony', '17', '91'), ('Jony', '17', '93'), ('Tom', '19', '80'), ('John', '20', '90'), ('Json', '21 ', '85')]

总结:

(1)list.sort()只能给列表排序,且要求列表中元素类型相同,且排序键只能有一个,无返回值,是给列表本身排序

(2)sorted()函数可以给列表,元组或者字典排序,排序键可以有多个,返回值是列表,默认排序字典为依照键排序;

(3)sorted()函数选择多个排序键时,有lambdaoperator.itemgetter()两种方法。

  1. sorted(lists,key=lambda list:list[2])
  2. sorted(lists,key=operator.itemgetter(1),reverse=False) # 默认flase为升序
  3. sorted(lists,key=operator.itemgetter(1,2))

(4)list.sort()多多少少有一点SB,多个排序键写起来很麻烦。所以要是单纯对单元素列表进行排序可以选sort多个排序键选sorted函数

5. set容器:自动删除重复数据

set容器能自动删除重复数据,去掉列表或元组中重复元素,返回一个集合

  1. lines='hell0 word a good moring good a'
  2. str1=lines.split(' ')
  3. print(str1)
  4. print(set(str1))
  5. list1=list(set(str1))
  6. list1.sort()
  7. print(list1)
  8. 输出:
  9. ['hell0', 'word', 'a', 'good', 'moring', 'good', 'a']
  10. {'a', 'moring', 'good', 'hell0', 'word'}
  11. ['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)匹配想要的字符串

匹配字符串可以是单个字符,也可以是字符串,返回的是起始位置,查询到第一个满足条件的返回下表,不再继续查询

  1. import re
  2. str1='123@#$sddcSD'
  3. n1=re.search('[a-z]',str1)
  4. n2=re.search('[%$#]',str1)
  5. n3=re.search('ddc',str1)
  6. print(n1)
  7. print(n2)
  8. print(n3)
  9. 输出:
  10. <re.Match object; span=(6, 7), match='s'>
  11. <re.Match object; span=(4, 5), match='#'>
  12. <re.Match object; span=(7, 10), match='ddc'>

(2)匹配若干个字符串,使用+

注意此时span( start, end )表示符合的开始和中止位置,group表示符合的字符串。都是找到第一个符合要求的就返回。

  1. import re
  2. str1='123@#$sddcSD12'
  3. n1=re.search('[a-z]+',str1)
  4. n2=re.search('[%$#]+',str1)
  5. n3=re.search('\d+',str1)
  6. n4=re.search('\D+',str1)
  7. print(n1.group())
  8. print(n3.span())
  9. print(n4.span()[0])
  10. print(n4.span()[1])
  11. 输出:
  12. sddc
  13. (0, 3)
  14. 3
  15. 12

(3)匹配一长串,按元素类型顺序

匹配先是小写字母,接数字,再接小写字母的字符串,同时使用group来选择匹配第几个要素的。group()与group(0)等价,都是全匹配。

  1. import re
  2. str1='kj123acbSD12'
  3. rex_compile=re.compile('([a-z]*)([0-9]*)([a-z]*)')
  4. rex=rex_compile.search(str1)
  5. print(rex)
  6. print(rex.group())
  7. print(rex.group(0))
  8. print(rex.group(1))
  9. print(rex.group(2))
  10. 输出:
  11. <re.Match object; span=(0, 8), match='kj123acb'>
  12. kj123acb
  13. kj123acb
  14. kj
  15. 123

总结:

(1)re.search函数从头开始寻找,找到第一个符合的,就可以直接返回下标

(2)findall函数找到所有符合的字符串,以列表形式返回