caicaix

导航

装饰器补充(算法)

递归函数

直接或间接调用自己的函数     # 如果递归函数没有结束条件就变成了无限递归,是不允许的

递归深度默认:1000

 

1.递推

一层一层的往下推

2.回溯

从最后的结论往回寻找出最原始的答案

 

算法之二分法

就是将一个列表或(其他容器)里面的数排列组合,将要找里面的数的时候从中间切分比较留半,然后再重复,最终至找到或者最后切分为空

 1 x = [11, 2, 3, 44, 55, 66, 77, 88, 99, 100, 23, 34, 45, 56, 67]
 2 x.sort()
 3 def bijiao(l):
 4     if len(l) == 0:
 5         print('没有找到这个数。')
 6         return 123
 7 
 8     zhongjian = len(l)//2
 9     if s > l[zhongjian]:
10         l = l[zhongjian+1:]
11         bijiao(l)
12     elif s < l[zhongjian]:
13         l = l[:zhongjian]
14         bijiao(l)
15     else:
16         print('找到了%s'% s)
17 
18 
19 s = int(input('请输入你想要比较的数:'))
20 bijiao(x)

 

三元表达式

当需求功能是二选一的时候,才用三元表达式

语法结构:

条件成立返回 if 前面的值   if 条件 else 条件不成立返回 else 后面的值

1 is_beautiful = True
2 res = '干饭' if 1 > 2 else '学习' if False else '喜欢' if is_beautiful else '不喜欢'

 

列表生成式

在列表每个元素后面添加内容

例:

1 lst = ['a', 'b', 'c', 'd']
2 res = [name + '1' for name in lst]
3 print(res)  # ['a1', 'b1', 'c1', 'd1']
4 
5 res1 = [name + '1' for name in lst if name != 'b']
6 print(res1)   # ['a1', 'c1', 'd1'] if后面不能加else

 

其他生成式

1.字典

将一个列表字典按照索引生成一个字典

1 l = [1, 2, 3]
2 res = {i: j for i, j in enumerate(l)}
3 print(res)   # {0: 1, 1: 2, 2: 3}

 

2.集合

将一个列表字典按照索引生成一个集合

1 l = [1, 2, 3]
2 res = {i for i in l}
3 print(res)   # {1, 2, 3}

 

3.元组(pass)

迭代器

 

匿名函数

 没有名字的函数,就是只有名字和返回值的简化

一般配合采用的内置函数使用

语法格式:

lambda  形参 :返回值

 

1 res = lambda x: x + 1
2 print(res(2))   # 3
3 print((lambda x: x + 1)(2))  # 3

 

常见的内置函数

1.map()(循环)

底层原理就是将容器里的数一个一个传到函数里

1 def a(x):
2     return x + 1
3 
4 
5 l = [1, 2, 3, 4, 5]
6 
7 res = map(a, l)
8 print(res)  # <map object at 0x000001891B2E29D0> 内存地址
9 print(list(res))  # [2, 3, 4, 5, 6]

 

2.zip()(拉链)

将多个元素以对应的索引值,组合成一个元组,以最短的元素为最终长度

1 l = 'hdkcxb'
2 l1 = [4, 5, 7, 8, 's']
3 res = zip(l1, l)
4 print(list(res))  # 需要转变类型,不然会输出内存地址

 

3.max()(取最大值)

按照ASCII取元素内最大的值

 

4.min()(取最小值)

按照ASCII取元素内最小的值

比较字典的v值返回K:

key = 后面只能加函数

1 l1 = {'a': 4, 'b': 5, 'c': 7, 's': 8}
2 print(min(l1, key=lambda key: l1[key]))

 

5.filter (过滤)

将后面元素里面的一个一个提取出来,然后满足前面函数条件的取出来重新组合

1 l1 = [11, 33, 44, 5, 66]
2 print(list(filter(lambda key: key > 30, l1)))    # [33, 44, 66]

 

posted on 2023-06-02 16:40  菜CAIx  阅读(6)  评论(0编辑  收藏  举报