递归函数,二分运算,正则表达式

本文介绍了Python的递归函数,包括其定义、常出现的RecursionError错误、最大递归深度及修改方法,还提及了优缺点。同时讲解了二分查找算法,强调列表需有序。重点阐述了正则表达式,包括字符组、元字符、数量、转义符等规则,以及re模块的多种方法。

递归函数:在函数中自身调用自己。

def  story():
    print('ssss')
    story()       #递归调用
story()    #调用

常报错recursionerror 这个错误是指超过内存最大深度
最大递归深度默认值是998,这个值是可以修改的
import sys
sys.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 re
num = 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()方法 拿到结果

 

转载于:https://www.cnblogs.com/huxl1/p/10903360.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值