3月02日课后总结

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]
posted @ 2023-03-02 17:54  橘子熊何妨  阅读(13)  评论(0)    收藏  举报