# 递归:在函数运行的过程中,直接或者间接调用了自身 官网表示:python默认最大递归深度为1000次 更改默认设置: # import sys # print(sys.getrecursionlimit()) # print(sys.setrecursionlimit(2000)) ''' 递归 1.递推:一层一层往下推导答案(每次递归之后复杂度相较于上一次一定要有所下降) 2.回溯:依据最后的结论推导出最初需要的答案 递归一定要有结束条件. ''' 伪代码:可能无法运行,但是可以表述逻辑 # age(5) = age(4) + 2 # age(4) = age(3) + 2 # age(3) = age(2) + 2 # age(2) = age(1) + 2 # age(1) = 18 使用递归推导 def data(n): if n == 1: return 18 return data(n - 1) + 2 print(data(5)) 再列举: l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]] 将l列表中的数据依次打印出 def data(l): for i in l: if type(i) is int: print(i) else: data(i) data(l)
什么是算法? 解决问题的搞笑方法 # 二分法(离入门级别的都还有一定的距离) l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111] '''二分法使用的前提:数据集必须有序''' l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111] def data(target, l): if len(l) == 0: print('取得值不再列表中') return centre = len(l) // 2 if target > l[centre]: right = l[centre + 1:] print(right) data(target, right) elif target < l[centre]: real_right = l[:centre] print(real_right) data(target, real_right) else: print('在了', target) data(321, l ) # 如果要好的元素在开头,效率没有依次查找高
'''当功能需求仅仅是二选一的情况,推荐使用三元表达式''' # 条件成立采用if前面的值 if 条件 else 条件不成立采用else后面的值 # 值 if 条件 else 值 res = '学习' if 1 < 2 else '周五通宵学python' print(res) res = '干饭' if 10 > 2 else ('不管饭' if 2 >5 else '写的啥!') print(res) # 实际应该 username = input('username>>>:') res = 'NB' if username == 'jason' else 'SB' print(res)
name_list = ['junjie', 'junjie1', 'junjie2'] # 给列表中的人名加上后缀 nb # 传统做法 new_list = [] for name in name_list: new_name = '%s_nb' % name new_list.append(new_name) print(new_list) # 列表生成式 res = ['%s_nb' % name for name in name_list] print(res) # 1.定义一个空列表 # new_list = [] # # 2.for循环老列表 # for name in name_list: # # 3.生成新的名字 # if name == 'jason': # continue # else: # new_name = '%s_DSB'%name # # 4.添加到新的列表中 # new_list.append(new_name) # print(new_list) '''列表生成式''' # res = ['%s_DSB' % name for name in name_list if name != 'jason'] # print(res)
l1 = ['name', 'age', 'hobby'] l2 = ['jason', 18, 'read'] new_dict = {} new_list = {j: l2[i] for i, j in enumerate(l1)} print(new_list) # 将两个列表合并成一个字典. 枚举 ''' enumerate() 针对这个方法使用for循环,每次会产生两个结果 第一个是从0开始的数字 第二个是被循环对象里面的元素 还可以通过start参数控制起始位置 ''' for i, j in enumerate(l1, start=1): print(i, j) # eg: name_list = ['jason', 'kevin', 'tony', 'jerry'] # res = {i: j for i, j in enumerate(name_list) if j != 'jason'} # print(res) {1: 'kevin', 2: 'tony', 3: 'jerry'}
溜了溜了