递归表达式系列

递归函数:

什么是递归函数:就是直接或者间接的调用自己

"""
递归:
    1. 递推
        逐层寻找答案
    2. 回溯
        根据最终的答案推导出最原始的答案
    3. 递归函数必须有结束条件!!!
"""

递归练习题:

lst = [1, [2, [3, [4, [5, [6, [7, ]]]]]]]

第一种方法:

 for i in lst:
#     # 判断此时的i值是整数还是列表,如果是整数直接打印,如果是列表,直接for循环
     if type(i) is int:
        print(i)
     else:
         # 如果是列表,直接for循环
         for j in i:
             if type(j) is int:
                 print(j)
             else:
                 # 如果是列表,直接for循环
                 for m in j:
                     if type(m) is int:
                        print(m)

第二种方法:

def get_lst(l):
    for i in l:
        if type(i) is int: #如果为int类型则输出
            print(i)
        else: #如果是其他类型则再次运行这个函数
            get_lst(i)

get_lst(lst)  

二分法:

二分法原则:只有列表中的数据有序才能使用二分法

eg:l = [1, 22, 44 ,10, 3, 45, 66, 88,101, 20, 30 ,40]

target_num = 20

def my_half(target_num, l):
    if len(l) == 0:  #列表l的长度为0时
        print('不好依稀,没找到')
        return
    middle_index = len(l) // 2  # 6  #整数除法,取商
    if target_num > l[middle_index]:  #如果要找的数字大于中间的值
        l_right=l[middle_index+1:] # l[7]  #取左边的值
        print(l_right)
        my_half(target_num, l_right)
    elif target_num < l[middle_index]: #如果要找的数字小于中间的值
        l_left=l[:middle_index]  #取右边的值
        print(l_left)
        my_half(target_num, l_left)
    else:
        print('找到了')

my_half(target_num, l)

 三元表达式:

语法结构:

def my_max(a, b):
    if a > b:
        return a
    else:
        return b

条件成立后的结果   if    条件   else   条件不成立的结果

def my_max(a, b):
    return a if a > b else b

 小练习:

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)

 

 列表生成式:

name_list = ['kevin', 'jack', 'ly', 'tony']

需求:除了jack不加_NB,其他都加

1.传统做法:

new_list = []
for name in name_list:
    if name == 'jack':
        continue
    else:
        res = '%s_NB' % name
        new_list.append(res)
print(new_list)

 2.特殊做法:

res = ['%s_NB' % name for name in name_list if name != 'jack']

 

字典生成式:

"""
enumerate:使用for循环的时候,可以解压赋值出来两个值,一个是索引,一个是元素
            start:控制的是起始位置,默认是从0开始
"""
for i, j in enumerate(l1, start=2):
     print(i ,j)
 #2. 字典生成式
 res = {i:j for i, j in enumerate(l1)}
 print(res)

第一种   第二种字典生成式

 

匿名函数:

"""
语法格式:
    lambda 形参:返回值
    lambda x:x**2

匿名函数一般步单独使用,会配合其他函数使用
    map()
"""

map(函数名, 要遍历的数据)  # 内部本质就是for循环,再记住两个参数的位置和作用

l = [1,2,3,4,5,6,7,8,9]
# res=list(map(index, l))  # <map object at 0x0000017D935721F0>
#map
res=list(map(lambda x:x**2, l))  # <map object at 0x0000017D935721F0>
print(res) # [1, 4, 9, 16, 25, 36, 49, 64, 81]

zip,拉链

以最短的长度为标准

max   min

filter过滤                          

 

                                     eval和exec的区别

 

posted @ 2023-03-07 19:21  无敌大帅逼  阅读(93)  评论(0)    收藏  举报