递归函数:在函数中自身调用自己。
def story(): print('ssss') story() #递归调用story() #调用
常报错recursionerror 这个错误是指超过内存最大深度
最大递归深度默认值是998,这个值是可以修改的import syssys.setrecursionlimit(1000000) #进行的设置 ,不建议修改缺点:递归比较占用内存,所以如果递归次数太多就不适合用该方法来解决了
优点:能使代码变得简单‘’
def age(l): if l == 40: return 40 elif i > 0 and i < 4: return age(l+1) +2
二分查找算法:把数列一分为二通过中间值与要查找的数的比较再进行查找
1 必须是有序的列表 所以找时候要先排序,后查找
#二分查找法 -利用递归l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,88]def find(l,aim,start = 0,end = len(l)): ret = (end - start) // 2 + start if start <= end: if l[ret] < aim: return find(l,aim,start = ret+1,end = end) elif l[ret] > aim: return find(l,aim,start = start,end = ret-1) else: return ret else: return "找不到该值"ret = find(l,44)print(ret)
正则表达式:
用来做字符串匹配的,在python中用re模块来执行正则表达式
正则表达式只是和字符串相关的匹配规则
1 字符组 [] 在同一位置出现的各种字符正常的一个组
[0-9] [a-z] [A-Z] [0-9a-z]
2元字符:
. :匹配除换行符之外的任意字符
\w: 匹配数字 字母 下划线 \W: 匹配非数字 字母 下划线
\s : 匹配所有空白符 \S:匹配所有非空白字符
\d: 匹配所有数字 \D:匹配左右非数字字符
\n : 匹配一个换行符
\t : 匹配一个制表符 tab键是一个制表符
\b : 匹配一个单词的结尾 g\b :以g结尾
^ : 匹配字符串的开始
$: 匹配字符串的结尾
a|b: 匹配a或匹配b[^a]: 除了a不匹配,剩下都匹配
() : 分组 匹配括号内的表达式,这个在re模块中都有用到
3 数量 :
*:重复0次或多次
+:匹配1次或多次
?:只匹配一次或0次 +?:匹配1次 加?是非贪婪匹配 {n}:匹配n次 {n,} :匹配n次或多次 {n,m}: 匹配至少n次,最多m次4 转义符:
\ :‘\\n’ print(r‘\n’) r 可以让整字符串不转义
.*? : .*?x 是匹配到x才结束
tool.chinaz.com/regex 这是个正则的匹配工具网页版的 (正则表达式在线测试博客:www.cnblogs.com/Eva-j/articles/7228075.html#_label10
re模块:
import renum = input('')if re.match('^(13|14|15|18)[0-9]{9}$',num): print("合法手机号")else: print("不合法手机号")
方法:
1finddall():re.findall('正则规则',‘被匹配的字符串’)
# 返回所有满足的结果,返回列表,到遇到分组(),会只返回()内匹配的
默认是分组优先的,,(?:...) 取消分组优先
2 search() : re.seach('规则',字符串).group()
#从前到后匹配道一次就返回,返回一个对象,需要调用.group()才能查看
如果没有找到返回none这时候调用group会报错
ret = re.search('a','sssdafgf')if ret: print(ret.group())
3 match() : 是只有从头匹配上才返回,如果正则规则从头开始就必须匹配上,就返回一个变量, 结果也需要调用group()方法返回,
如果没有匹配到返回none ,这时调用group报错
4 spilt(): re.split('','') #按正则关系去分割
re.split('[ab]','abcd') #注意这个会以a匹配到分割一次,匹配到b再分割一次
5 sub: re.sub('\d','H','sdfg3gg4') # 将数字替换为H
6subn: 替换,返回一个元祖(结果,替换次数)
7 complie : obj = re.complie('\d3') #先编译,以后多次调用规则
ret = obj.search('12sfg23ghh3') #进行匹配
8 finditer: ret = re.finditer('\d','sgshjfu5378hc6') #返回一个存放匹配结果的迭代器
结果调用group()方法 拿到结果