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

一、递归函数

递归函数的定义

"""那些在自身内部调用自身的函数"""

递归函数的特征

"""一次次向下推导答案,但是每一次递归过后复杂度有所下降
	依据最后的结论往后推导出最初需要的答案
	递归一定要有结束条件
"""

递归函数的应用

# 打印出列表中的每一个元素
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]
posted @ 2021-11-18 21:58  recordlife  阅读(77)  评论(0)    收藏  举报