递归函数、二分法、三元表达式、匿名函数的使用
一、递归函数

递归函数的定义
"""那些在自身内部调用自身的函数"""
递归函数的特征
"""一次次向下推导答案,但是每一次递归过后复杂度有所下降
依据最后的结论往后推导出最初需要的答案
递归一定要有结束条件
"""
递归函数的应用
# 打印出列表中的每一个元素
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
def get_num(l):
for i in l:
if type(i) is int:
print(i)
else:
get_num(i)
get_num(l)
二、算法之二分法

算法的概念
# 解决问题的高效办法
二分法的概念
# 在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algorithm)[1]、对数搜索算法(英语:logarithmic search algorithm)[2],是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
如何使用二分法(案例)
# 二分法能够使用的场景,数据必须有序集
def my_partner(target_num, l): # target_num=321 l=l
if len(l) == 0:
print('不好意思 我尽力 没找到')
return
# 先获取中间位置索引值
middle_index = len(l) // 2 # 8
# 判断中间索引对应的值比目标值大还是小
if target_num > l[middle_index]:
# 说明要找的元素只可能出现在列表的右侧
l_right = l[middle_index + 1:] # l[9:]
print(l_right)
my_partner(target_num, l_right)
elif target_num < l[middle_index]:
# 说明要找的元素只可能出现在列表的左侧
l_left = l[:middle_index]
print(l_left)
my_partner(target_num, l_left)
else:
print('找到了', target_num)
使用二分法的优缺点
# 查找的数据不存在时,需要添加说明条件
# 当要查找的数据在开头时,二分法的查找效率没有依次查找的效率高
三、三元表达式

三元表达式的推荐使用场所
# 当功能需求为二选一的时候推荐使用三元表达式
三元表达式的语法结构
if 条件成立时执行的语句 if条件 else if条件不成立执行的语句(可以加嵌套,但是不推荐)
三元表达式的实际运用
# 无嵌套
score = int(input('请输入成绩'))
res = '不及格' if score < 60 else '优秀'
print(res)
# 有嵌套
score = int(input('请输入成绩'))
res = '不及格'if score < 60 else ('中等' if score < 80 else '优秀' )
print(res)
四、列表生成式

[修改方式 for语句 if语句]
# 给列表后面所有的元素加上_MAN的尾缀,除了jasion以外
l = ['jack', 'tony', 'jasion','nike']
res = ['%s_MAN' % i for i in l if i != 'jasion']
>>>['jack_MAN', 'tony_MAN', 'nike_MAN']
五、匿名函数

匿名函数的定义:匿名函数就是没有名字的函数
匿名函数的结构:lambda 形参:返回值
print((lambda x:x**3)(2)) # 8
匿名的使用(独自使用,配合函数使用)
# map(func, *iterables)映射函数
l = [1, 2, 3, 4]
print(list(map(lambda x:x**2, l))) #[1, 4, 9, 16]

浙公网安备 33010602011771号