赞
踩
递归:直接或者间接的调用其他函数
递归的使用场景:
1. 递推
一层一层的往下寻找答案
2. 回溯
通过最后一个结果往回寻找最开始的那个答案
递归是必须有结束条件!!!!
- # 使用代码实现以上逻辑
- def age(n):
- if n == 1:
- return 18
- # age(5) = age(4) + 2
- # age(4) = age(3) + 2
- return age(n-1) + 2 # n=2---》age(1)---->age(2)----->age(3)。。。
-
- res=age(5) # 求第5个人的年龄
- print(res)
-
-
- #### 递归实现
- def get_list(l):
- for i in l:
- if type(i) is int:
- print(i)
- else:
- get_list(i)
- get_list(l)
算法:就是解决问题的高效办法
算法常见类型有二分法、冒泡排序、选择排序、堆排序、等
二分法的使用场景:让你在一个列表中查找某个数字是不是存在
二分法的原理:
1. 列表必须先排序(从小到大,从大到小)
2. 折半查找
思路:
遍历列表l一个一个去比较,如果比较到了,就是找到了,否则,就是没找到
例:找66这个数字是否在列表 l 中
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
- 代码实现二分法(Python代码):
- l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
- # l = ['kevin', 'jerry', 'tank', 'abc']
-
- # 1. 排序
- l.sort()
- # ['abc', 'jerry', 'kevin', 'tank']
- # print(l) # [2, 3, 11, 23, 43, 45, 45, 55, 66, 67, 88, 99]
-
- # 2. 去列表的中间那个值,然后给66比较
- target_num = 200
- def my_half(l,target_num):
- if len(l) == 0:
- print('没找到')
- return
- # 3. 取的就是中间的那个索引
- middle_index = len(l) // 2 # 向下取整 5 // 2 == 2 6 // 2 == 3
- if target_num > l[middle_index]:
- l_right = l[middle_index+1:] #
- print(l_right)
- my_half(l_right, target_num)
-
- elif target_num < l[middle_index]:
- l_left = l[:middle_index]
- print(l_left)
- my_half(l_left, target_num)
- else:
- print('找到了')
-
- my_half(l, target_num)
语法结构:
res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果
对于只有二选一的情况,我们推荐使用三元表达式
例:比较a和b大小
- def my_max(a, b):
- return a if a > b else b
- res = my_max(1, 2)
例:把列表中得每一个名字后面都拼上后缀_SB
names_list = ['kevin', 'jerry', 'tank', 'oscar']
- 把列表中得每一个名字后面都拼上后缀_SB
- # names_list = ['kevin', 'jerry', 'tank', 'oscar']
-
- # 把列表中得每一个名字后面都拼上后缀_SB
- new_list = [] # 存放拼接之后的人名
- for name in names_list:
- res = '%s_SB' % name
- res = name + '_SB'
- new_list.append(res)
- print(new_list) # ['kevin_SB', 'jerry_SB', 'tank_SB', 'oscar_SB']
-
- # 列表生成式
- res = [ name + '_SB' for name in names_list]
- print(res)
例:把列表中得每一个名字后面都拼上后缀_SB,除了 jerry 外
names_list = ['kevin', 'jerry', 'tank', 'oscar']
- names_list = ['kevin', 'jerry', 'tank', 'oscar']
- # 列表中得每一个名字都拼接上后缀:_SB,除jerry之外
-
- new_list = []
- for name in names_list:
- if name == 'jerry':
- new_list.append(name)
- continue
- else:
- new_list.append(name+'_SB')
- print(new_list)
-
- # 列表生成式如何写
- # res = [name+'_SB' for name in names_list if name != 'jerry' ]
- res = [name+'_SB' if name != 'jerry' else name for name in names_list]
- print(res)
例:把L1,L2拼接成字典形式L1为key值,L2为value值
- l1 = ['name', 'age', 'gender']
- l2 = ['oscat', 18, 'male']
-
- #d= {'name':oscat, age:18, 'gender':'male'}
-
- d = {}
- for i in range(len(l1)):
- d[l1[i]] = l2[i]
-
- print(d) # {'name': 'oscat', 'age': 18, 'gender': 'male'}
使用enumarate拼接L1,L2
- for i, j in enumerate(l1):
- # # (0, 'name')
- # # (1, 'age')
- # # (2, 'gender')
- print(i, j)
-
- d = {l1[i]:l2[i] for i, j in enumerate(l1)}
-
- print(d) # 0: 'name', 1: 'age', 2: 'gender'}
特别注意:没有元组生成式
- s = {i for i, j in enumerate(l1)} # 生成器
- print(s)
-
- t = (i for i, j in enumerate(l1))
- print(t)
END
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。