总结十二

一.函数递归

函数递归:在调用阶段,函数func直接或间接调用本身

递归分为两个阶段:

  1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降,直到有一个最终的结束条件

  2.递推:一次次往回推导的过程

"""
age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18

age(n) = age(n-1) + 2  # n > 1
age(1) = 18   # n = 1
"""
# 递归函数

def age(n):
    if n == 1:      #必须要有结果条件
        return 18
    return age(n-1) +2
res = age(5)
print(res)

26
递归函数

 

二.算法之二分法

算法:高效率解决问题的方法

# l = [1,3,5,12,33,57,89,110,128,147,168,174,188,345]
# num = 345

# for i in l:

#  if num == i:

#    print('find it')

二分法:容器类型里面的数字必须有大小顺序

l = [1,3,5,12,33,57,89,110,128,147,168,174,188,345]
target_num = 666
def get_num(l,target_num):
    if not l:
        print('这点钱,很难帮你办事啊!')
        return
    # 获取列表中间的索引
    print(l)
    middle_index = len(l) // 2
    # 判断target_num跟middle_index对应的数字的大小
    if target_num > l[middle_index]:
        # 切取列表右半部分
        num_right = l[middle_index + 1:]
        # 再递归调用get_num函数
        get_num(num_right,target_num)
    elif target_num < l[middle_index]:
        # 切取列表左半部分
        num_left = l[0:middle_index]
        # 再递归调用get_num函数
        get_num(num_left,target_num)
    else:
        print('find it',target_num)

get_num(l,target)num)
        

 

三.三元表达式

三元表达式固定表达式

  值1 if 条件 else 值2

    条件成立 值1

    条件不成立 值2

三元表达式的应用场景:只推荐在只有两种情况的可能下

def my_max(x,y):
    if x > y:
        return x
    else:
        return y
"""
当 x 大的时候返回 x ,当 y 大的时候返回 y 
当某个条件成立做一件事,不成立做另外一件事
"""
x = 1
y = 2
res = x if x > y else y
# 如果if后面的条件成立返回if前面的值,否则返回else后面的值
print(res)
View Code
is_free = input('请输入是否免费(y/n)>>>:')
is_free = '免费' if is_free == 'y' else '收费'
print(is_free) 
View Code

 

四.列表生成式

# 在name后面加上_nb

l = ['tank','nick','egon','jason']

l1 = []

for name in l:

  l1.append('%s_nb'%name)

print(l1)

 

# 列表生成式

l = ['tank_nb','nick_nb','egon_nb','jason_nb']

res = ['%s_plus'%name for name in l]

print(res)

 

l = ['tank_nb', 'nick_nb', 'egon_nb','jason_verynb']

# 排除列表中不同的那个

res = [name for name in if name.endswith('_nb')]  # 后面不支持加else

print(res)

# 先for循环依次去除列表里面的每一个元素

# 然后交由if判断,条件成立才会交给for前面的代码

# 如果条件不成立,当前的元素,直接舍弃

 

五.字典生成式

# 创建两个列表

l1 = ['name','password','hobby']

l2 = ['jason','123','dbj']

# 创建一个空字典

d = { }

# for循环:

for i,j in enumerate(l1):

  d[j] = l2[i]

print(d)

 

六.匿名函数

 

匿名函数:没有名字的函数
特点:临时存在 用完就没了
lambda 关键词

 

def my_sum(x,y):
    return x + y

res = (lambda x,y:x+y) (1,2)
print(res)

func = lammda x,y:x+y
print(func(1,2))

# :左边的相当于函数的形参
# :右边的相当于函数的返回值
#  匿名函数通常不会单独使用,是配合内置函数一起使用的

 

七.常用的内置函数

l = [1,2,3,4,5]

print(max(l))   #  内部基于for循环

"""

A-Z    65 90

a-z     97 122

"""

print(chr(97))

d = {

  'egon':38888,

  'jason':88888,

  'nick':26888,

  'tank':16888,

}

def index(name):

  return d[name]

print (max(d,key=lambda name:d[name]))

# 比较薪资  返回人名

print(min(d,key=lambda name:d[name]))

 

# map  映射

l = [1,2,3,4,5,6

print(lisr(map(lambda x:x+5,1)))   # 基于for循环

# zip 拉链  #  基于for循环

l1 = [1,2]

l2 = ['jason','egon','tank']

l3 = ['a','b','c']

print(list(zip(l1,l2,l3)))

 l = [1,2,3,4,5,6]
 print(list(filter(lambda x:x != 3,l))) # 基于for循环

 l = ['jason','egon','nick','tank']

print(sorted(l,reverse=True))

 

from functools import reduce

l = [1,2,3,4,5,6

print(reduce(lambda x,y:x+y,l,19))   # 19 初始值  第一个参数

#  当初始值不存在的情况下,按照下面的规律

# 第一次先获取两个元素,相加

# 之后每次获取一个与上一个相加的结果再相加

 

posted @ 2019-07-13 00:50  二哈强拆Python世界  阅读(128)  评论(0编辑  收藏  举报