博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数进阶之算法
阅读量:4316 次
发布时间:2019-06-06

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

  一、函数的递归  

  # 递归的前提是函数的回溯条件同等条件有规律的   # 递归函数的定义:直接或者之间接的调用自身   
  # 回溯(分解):就是函数一次次重复的过程,但必须是遵循每一次重复的重复问题的复杂度难度会下降              # 最终会有一个终止条件(分界的出口)   # 递推(合并):就是一次次往回推导的过程 1.1例如:
# 求年纪# 第一个比第二个的年龄小2岁 第二个比第三个小2 岁  第三个比第四个小2岁 第5个25岁#  结束条件 n == 1 25 岁# n=5的时候是几岁   也就是他是第四的小两岁age(4)-2  第四是第三个age(3)-2 第三是第二的age(2)-2 第一25# 表达式 age(n-1)-2
def age(n):    if n == 1:        return 25    return age(n-1)-2res = age(5)print(res)

  1.2 求阶乘:

 

  二、算数之二分法(前提必须是一个从小到大排列的迭代对象容器):帮助我们快速的拿到列表中我们想要的值,如果列中的数量少可以使用列表

但是列表中如果数量量很大,再使用fo 循环那就相当的费时。此时我们就可以使用算数二元分法,可以节省时间。

 

  思路:1.将一个列表的长度除//2 整除 middle_index 拿到中间的数的索引

      2.我们判断左右两边的值然后进行切分 

     3.再次调用递归函数 传入一个切分后的列表 再进行切分

# 算数二分法:target_num = 777l = [1,2,3,4,55,66,77,88,99,777,888,999]def get_num(l, target_num):    # 获取中间数的索引    if l is []:       print('空值没有办法取值')       return    middle_index = len(l)//2    # 然后进行比较 左右两边的值    # 1,如果大于get_num>l[middle_num]  》》》切分右列表    if target_num > l[middle_index]:        right_num = l[middle_index+1:]    # 在调用递归get_num()        get_num(right_num,target_num)    # 2,如果小于get_num

 

 

  三、表达式

  1.三元表达式  

# 1.三元表达式# 作用是一眼能看出来的可以使用,意思是最对一个if else# 固定语法 值1 if 条件 else 值2# 如条件满足返回值1 如果条件不成立返回值2x = 10y = 20res =x if x>y else yprint(res)is_free = input('请输入是否免费
:').strip()is_free = '免费'if is_free == 'y' else '收费'print(is_free)

  3.2 列表推导式:

# 列表生成式k =  ['tank','nick','oscar','sean']l = ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb','jason_NB']# 需求一将列表k 元素后面+上_sbres = ["%s_sb"%name for name in k ]print(res)# 里面进行for循环# 需求2 将列表l中 打印出有_sb的名字res1 = [name for name in l if name.endswith('_sb')]print(res1) # ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb']# 内部本质也是for循环取出每一个值在交给后面的if 判断 条件成立满做添加到新列表# 条件不成立 的元素做直接剔除

  3.3 字典生成式:

l1 = ['name','password','hobby']l2 = ['jason','123','DBJ','egon']# 需求将 l1 行成k:v 健值对my_dict = {}for k,v in enumerate(l1,1):    print(k,v)    my_dict[k] = l2[k]print(my_dict)# {1: 'name', 2: 'password', 3: 'hobby'}# 用字典生成式将l2 行成k,v健值对my_dic = {k:v for k,v in enumerate(l2)}print(my_dic)# {0: 'jason', 1: '123', 2: 'DBJ', 3: 'egon'}

 

 

四、匿名函数

# 匿名函数 固定语法:# lambda 参数:返回值(表达式)# 匿名函数通常不会单独使用一般是配合和内置函数一起用def sum(x,y):    return x+yprint(sum(10,20))res = lambda x,y : x+yprint(res(10,29))

 

  五、常用的函数内置函数

  1.max() 和min()

my_dic = {    'koko':13000,    'tank':30000,    'jason':888888,     'yye':18000}# 需求拿到薪资最高的人名,很显然for 循环拿到的是key 比较的是字母# 需要用到max()内置函数res = max(my_dic,key=lambda name:my_dic[name])print(res)# jason# 求最低min()res1 = min(my_dic,key=lambda x:my_dic[x])print(res1)# koko

  2.map()   zip()    fiter()    reduce()  sorted()

  2.1 map() 映射

# map()映射# l = [1,2,3,4,5]# res = list(map(lambda x,:x+1,l))# print(res)  # [2, 3, 4, 5, 6]# 本质基于for 循环

  2.2 zip() 

# 2.zip() 拉链# l = [1,2,3]# l2 = ['a','b','c']# res1 = list(zip(l,l2))# print(res1)  # [(1, 'a'), (2, 'b'), (3, 'c')]

  2.3 filter()

# 3.filter() 过滤l3 = [11,22,33,44,55,66,77]print(list(filter(lambda x:x !=66,l3)))# 基于for循环# [11, 22, 33, 44, 55, 77]

 

  2.4 reduce()

from functools import reducel = [1,2,3,4,5,6]print(reduce(lambda x,y:x+y,l,19))  # 19初始值  第一个参数# 当初始值不存在的情况下 按照下面的规律# 第一次先获取两个元素 相加# 之后每次获取一个与上一次相加的结果再相加

 2.5 sorted()

# sorted()# 有三个参数(parameter)# 1:iterable 就是可可迭代对象# 2: key:为重新规定排序的规则 一般为lambda 匿名函数# 3: reverse False默认升序 将序为Trueli = [22,-33,11,44,5]print(sorted(li, key=lambda x:abs(x)),)  # 按照绝对值来排序print(sorted(li,reverse=True))  # 降序

 

 

 # 随机生6位验证码

# 随机生成验证码import randomdef s_code():    code = ''  # 字符串的形式展示 先定义一个空字符串    for i in range(1,7):        num = random.randint(0,9)  # 数字  字符串拼接必须是字符串        alf = chr(random.randint(65,90))  # 字母        add = random.choice([num,alf])  # 随机选择其中一个        code = ''.join([code,str(add)])  # 需要转成字符串     return codeprint(s_code())
# 产生一个随机验证码6位数 def get_num(n): # 循环六次 打印留个数     code = ''     for i in range(n):         # 第一个为数字         num = str(random.randint(0,9))         # 第二个为大写         alp_lower = chr(random.randint(65,90))         # 第三为小写         alp_upper = chr(random.randint(97,122))         code += random.choice([num,alp_lower,alp_upper])     # print(code)     return code res = get_num(7) print(res)

 

转载于:https://www.cnblogs.com/mofujin/p/11177611.html

你可能感兴趣的文章
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
Part 2 - Fundamentals(4-10)
查看>>
使用Postmark测试后端存储性能
查看>>
NSTextView 文字链接的定制化
查看>>
第五天站立会议内容
查看>>
CentOs7安装rabbitmq
查看>>
(转))iOS App上架AppStore 会遇到的坑
查看>>
解决vmware与主机无法连通的问题
查看>>
做好产品
查看>>
项目管理经验
查看>>
笔记:Hadoop权威指南 第8章 MapReduce 的特性
查看>>
JMeter响应数据出现乱码的处理-三种解决方式
查看>>
获取设备实际宽度
查看>>
Notes on <High Performance MySQL> -- Ch3: Schema Optimization and Indexing
查看>>
Alpha冲刺(10/10)
查看>>
数组Array的API2
查看>>
为什么 Redis 重启后没有正确恢复之前的内存数据
查看>>
No qualifying bean of type available问题修复
查看>>