博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归函数,二分运算,正则表达式
阅读量:5234 次
发布时间:2019-06-14

本文共 2467 字,大约阅读时间需要 8 分钟。

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

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 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()方法 拿到结果

 

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

你可能感兴趣的文章
POJ 2114 Boatherds
查看>>
生产随机字符串
查看>>
RPC框架性能基本比较测试
查看>>
自动化开发中的知识点
查看>>
POJ——T 2406 Power Strings
查看>>
使用spring boot 实现两个没有关系的类注入
查看>>
在YII中如何新添加一个component
查看>>
nginx/fpm启停
查看>>
51nod 1799 二分答案(分块打表)
查看>>
异或运算符的运用
查看>>
hdu 1800 (字典树)
查看>>
vue动态修改title
查看>>
连续滑动操作
查看>>
使用xtrabackup进行mysql数据库备份
查看>>
android 自定义动画
查看>>
js数组与对象的一些区别。
查看>>
社工入门之如何分析一个人的作息规律
查看>>
SDWebImage缓存图片的机制(转)
查看>>
初始化块与构造方法
查看>>
Kubernetes 集群日志管理 Elasticsearch + fluentd(二十)
查看>>