一、递归函数
"递"是传递的意思,"归"是归还的意思,先把一个方法一层层传递下去,然后传递到最后一层再把结果归还回来。实质上,递归就是把一个大问题不断拆解,像剥洋葱一样,最终拆解到最小层面,会返回解题结果。
def index():
print(index)
home()
def home():
print(home)
index()
index()
递归在现实编码中是不允出现的,一旦出现递归就会无限报错
1.递归使用场景
1、至少有一个明确的递归结束条件;
2、给出递归终止时的处理办法;
3、每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少
代码实现以上逻辑
'''现已知8人每个人都是比前一位人大2岁,第一个人18岁,求第八人多少岁'''
def age(n):
if n == 1:
return 18 # 已知第一个人年龄
return age(n-1) + 2
res = age(8)
print(res)
二、算法二分法
算法:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。高效解决问题
#二分法使用场景:在一个列表中查找某个数字是否存在
l = [1, 3, 4, 5, 33, 33, 22, 55, 77, 88, 99, 66, 11, 33]
'''查找数字66是否在这个列表内'''
思路:
遍历列表中每一个元素
for i in l:
i == 66
print('找到了')
二分法:
1. 列表必须是从小到大排序
2. 折半找
#1.先排序
l.sort()
#2.把要找的数字定义出来
number = 66
def index(l,number):
middle = len(l) // 2
if number > l[middle]:
right = l[middle + 1:]
index(right,number)
elif number < l[middle]:
left = l[:middle]
index(left,number)
else:
print('找到了')
index()
三、三元表达式
写一个比较两个值大小的函数,返回大的
def max(a, b):
if a > b:
return a
else:
return b
res = max(1, 2)
print(res)
当判断条件二选一是推荐使用三元表达式
def max(a, b):
return a if a > b else b
#res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果
res = max(1, 2)
print(res)
"""还支持嵌套"""
## 不推荐写太多的嵌套,一般两层就够了,超过两层了,建议不这样写,面试的时候:成数非常多
res = 2 if 2 > 10 else ( 10 if False else (100 if 10 > 5 else (2 if False else 1)))
print(res)
四、列表生成式
#把列表中得每一个名字后面都拼上后缀_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)
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' if name != 'jerry' else name for name in names_list]
print(res)
五、字典生成式、集合生成式
list = ['name', 'age', 'gender']
list1 = ['sb', 18, 'male']
d = {}
for i in range(len(list)):
d[list[i]] = list1[i]
print(d) # {'name': 'oscat', 'age': 18, 'gender': 'male'}
补充一种用法 enumerate
d = {list[i]:list1[i] for i, j in enumerate(list)}
print(d)# {'name': 'oscat', 'age': 18, 'gender': 'male'}
没有元祖生成式