3/02课后总结
递归函数
"""
直接或者间接的调用自己、、;
递归:
1. 递推
逐层寻找答案
2. 回溯
根据最终的答案推导出最原始的答案
3. 递归函数必须有结束条件!!!
"""
# 练习题:
def seek(lis):
print(lis[0])
del lis[0]
if len(lis) != 0:
lis1 = lis[0]
return seek(lis1)
lis = [1, [2, [3, [4, [5, [6, [7, ]]]]]]]
seek(lis)
二分法
# 算法是为了提高效率
# 二分法的原则:1、 列表中得数字必须要有序,不管是升序还是降序都可以,如果没有顺序就不能使用二分法
def seek(num, l):
if len(l) != 0:
mid = len(l) // 2
if num > l[mid]:
l_right = l[mid + 1:]
print(l_right)
seek(num, l_right)
elif num < l[mid]:
l_left = l[:mid]
print(l_left)
seek(num, l_left)
else:
print('找到了')
else:
print('没有')
lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
lis.sort()
print(lis)
n = 0
seek(n, lis)
三元表达式
def my_max(a, b):
if a > b:
return a
else:
return b
'''三元表达式实现上述功能'''
def my_max(a, b):
return a if a > b else b
"""
语法结构:
条件成立之后的结果 if 条件 else 条件不成功之后的结果
使用场景:结果二选一的情况
"""
a = 1
b = 10
c = 10
d = 20
res=a if a > b else (c if c > d else ( 'bbb' if d > c else 'aaa'))
print(res)
列表生成式
lis = ['123', '555', '666', '777']
res = ['%s_nb' % name for name in lis if name != '555']
res = ['%s_nb' % name if name != '555' else '%s_999' % name for name in lis ]
print(res)
# 太过于复杂不适合用,适用比较简单的
字典生成式,集合生成式
"""
enumerate:使用for循环的时候,可以解压赋值出来两个值,一个是索引,一个是元素
start:控制的是起始位置,默认是从0开始
"""
# 2. 字典生成式
# res = {i:j for i, j in enumerate(l1)}
# print(res)
# 集合
# res = {i for i in l1}
# print(res)
# 元组没有生成式
# 迭代器
res = (i for i in l1)
print(res) # generator
匿名函数
# 没有名字的函数
"""
语法格式:
lambda 形参:返回值
lambda x:x**2
匿名函数一般步单独使用,会配合其他函数使用
map()
"""
res=list(map(lambda x:x**2, l)) # <map object at 0x0000017D935721F0>
print(res) # [1, 4, 9, 16, 25, 36, 49, 64, 81]