递归函数+二分法+三元表达式+列表、字典生成式及其他+匿名函数

递归函数+二分法+三元表达式+列表、字典生成式及其他+匿名函数

一、递归函数

一、定义

递归:函数在运行过程中 直接或者间接的调用了自身

 

 

二、递归深度

 

 

 

 

三、递推与回溯

<<<<<<<<<<<<<<伪代码:可能无法运行 但是可以表述逻辑>>>>>>>>>>>>>>>>>

 

 

 

 递归用函数表达

 

 

 

二、算法之二分法

 算法:解决问题的高效方法。
二分法:算法中最简单的,连入门级都算不上。二分法又称为折半法,一般用于数据量大中查找值,要求数据集必须是有序的。通俗的说就是把数据集一分为二,再一分为二再一分为二一直分到最后一个数据再判断。

 1 l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
 2 '''
 3     思路:找到列表的中间位置的数据跟查找值进行比较,如果一样就直接打印找到了,如果大了就在左半边,如果小了就在右半边。
 4         用函数进行循环二分操作,然后找到最后空列表还没找到的话,就不存在直接打印找不到。
 5     '''
 6     # 定义函数
 7     def index(target_num, l):
 8         # 判断列表是否空的,空的就打印找不到
 9         if len(l) == 0:
10             print('没找到')
11             return
12         # 如果不是空的就执行以下二分操作,先找中间值
13         m_num = len(l) // 2
14         # 与查找值比较,然后继续循环二分操作
15         if l[m_num] > target_num:
16             l_l = l[:m_num]
17             print(l_l)
18             index(target_num, l_l)
19         elif l[m_num] < target_num:
20             l_r = l[m_num + 1:]
21             print(l_r)
22             index(target_num, l_r)
23         else:
24             print('找到了%s' % target_num)
25     index(1, l)  #  查找值1
二分法

 

 

三、三元表达式

三元表达式是python为我们提供的简化代码的一种解决方案。一般用于两个功能二选一的情况。三元表达式尽量不要嵌套使用。
结构:条件成立采用if前面的值 if 条件 else 条件不成立采用后面的值

1 def index(a, b):
2     if a > b:
3         return a
4     return b
5 # 语法格式:条件成立采用if前面的值 if条件 else 条件不成立采用else后面的值
6 # 以上用三元表达式可以写成:
7 def index(a, b):
8     return a if a > b else  b
三元表达式

 

 

 1 # 三元表达式嵌套
 2 def index(a, b):
 3     res = '干饭' if a > b else ('不管饭' if a > b else '')
 4     print(res)
 5 index(1, 8)
 6 
 7 is_free = input('是否免费y/n:').strip()
 8 if is_free == 'y':
 9     print('免费')
10 else:
11     print('收费')
12 
13 # 使用三元表达式
14 is_free = input('是否免费y/n:').strip()
15 print('免费') if is_free == 'y' else print('收费')
三元表达式

 

 

四、列表生成式

 列表生成式是python给我们提供的一种简化代码的解决方案,用于快速生成列表。

 1 name_list = ['jason', 'kevin', 'tony', 'jerry']
 2 # 给列表中所有的人名加上_DSB后缀
 3 
 4 '''传统做法'''
 5 # 思路:定义一个空列表,用for循环取数然后加上后缀再放到空列表里面去,最后打印出来
 6 new_list = []
 7 for name in name_list:
 8     name1 = '%s_DSB' % name
 9     new_list.append(name1)
10 print(new_list)
11 
12 '''列表生成式'''
13 res = ['%s_DSB' % name for name in name_list]
14 print(res)

 

 

 

 1 name_list = ['jason', 'kevin', 'tony', 'jerry']
 2 # 除了jason外,给列表中所有的人名加上_DSB后缀
 3 '''传统做法'''
 4 # 思路:定义一个空列表,用for循环取数判断是不是jason,如果是就跳过,如果不是然后加上后缀再放到空列表里面去,最后打印出来
 5 name_list1 = []
 6 for name in name_list:
 7     if name == 'jason':
 8         continue
 9     else:
10         name2 = '%s_DSB' % name
11         name_list1.append(name2)
12 print(name_list1)
13 
14 '''列表生成式'''
15 res2 = ['%s_DSB' % name for name in name_list if name != 'jason']
16 print(res2)

 

 

 

 

五、其他生成式

1.字典表达式

1 name_list = ['jason', 'kevin', 'tony', 'jerry']
2 res = {i: j for i, j in enumerate(name_list, start=1) if j != 'jason'}  # 开始计数位置1
3 print(res)

2.集合表达式

res1 = {i for i, j in enumerate(name_list)}
print(res1, type(res1))

 

 

3.枚举

 1 l1 = ['name', 'age', 'hobby']
 2 l2 = ['jason', 18, 'read']
 3 
 4 # 1.把两个列表的元素按照从左到右组织成字典
 5 new_dict = {}
 6 for i in range(len(l1)):
 7     new_dict[l1[i]] = l2[i]
 8 print(new_dict)
 9 
10 # 2. 枚举enumerate()的用法
11 count = 0
12 for i in l1:
13     print(count, i)
14     count += 1
15 # 可以写成:
16 for i, j in enumerate(l1, start=1):  # start=1即从1开始
17     print(i, j)

 

 

 

六、匿名函数

匿名函数即没有名字的函数,一般不会独立使用,都是配合其他函数使用。
语法格式:limbda 形参:返回值

 1 print(lambda x: x**2)  # x是形参,x**2是返回值 打印空函数就是打印内存地址
 2 
 3 print((lambda x: x ** 2)(2))  # 传参x =2进匿名函数,返回值2的平方为4
 4 # 分开写的格式:
 5 res = lambda x: x ** 2
 6 print(res(2))
 7 
 8 '''匿名函数一般不会单独使用 都是配合其他函数一起使用'''
 9 # map()  映射
10 l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
11 def index(n):
12     return n ** 2
13 print(list(map(lambda x: x**2, l)))

 

posted @ 2021-11-18 18:03  Panda_Xin  阅读(23)  评论(0编辑  收藏  举报