标签:index name res list 列表 内容 print 今日
1.递归函数
在函数的运行过程中直接或者间接的调用了自身
1 # 官网表示:python默认的最大递归深度为1000次 2 # import sys 3 # print(sys.getrecursionlimit()) 4 # print(sys.setrecursionlimit(2000)) 5 count = 1 6 def index(): 7 global count 8 count += 1 9 print(count) 10 print('from index') 11 index() 12 index() 13 14 # def func(): 15 # print('from func') 16 # index() 17 # def index(): 18 # print('from index') 19 # func() 20 # index()
递归
1.递推
一层层往下推导答案(每次递归之后复制度相较于上一次一定要有所下降)
2.回溯
依据最后的结论往后推导出最初需要的答案
递归一定要有结束条件
1 # 伪代码:可能无法运行 但是可以表述逻辑 2 # age(5) = age(4) + 2 3 # age(4) = age(3) + 2 4 # age(3) = age(2) + 2 5 # age(2) = age(1) + 2 6 # age(1) = 18 7 8 # def get_age(n): 9 # if n == 1: 10 # return 18 11 # return get_age(n - 1) + 2 12 # print(get_age(5))
1 l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]] 2 # 打印出列表中每一个元素(列表除外) 3 # 1.循环该列表 获取列表内每一个元素 4 # 2.判断该元素是否是数字 如果是数字 则直接打印 5 # 3.如果是列表 则循环该列表 获取列表内每一个元素 6 # 4.判断该元素是否是数字 如果是数字 则直接打印 7 # 5.如果是列表 则循环该列表 获取列表内每一个元素 8 # 6.判断该元素是否是数字 如果是数字 则直接打印 9 # 7.如果是列表 则循环该列表 获取列表内每一个元素 10 def get_num(l): 11 for i in l: 12 if type(i) is int: 13 print(i) 14 else: 15 # 也是for循环 然后判断 16 get_num(i) 17 get_num(l) 18 19 # for i in []: 20 # print(i,'懵逼了!')
算法之二分法
什么是算法
解决问题的高效方法
1 # 二分法(入门级别:还有一定距离) 2 l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111] 3 # 第一种方式 直接for循环从左往右依次查找 4 5 # 第二种方式 二分法 6 """ 7 二分法能够使用的场景 数据集必须有序 8 """ 9 def my_partner(target_num, l): # target_num=321 l=l 10 if len(l) == 0: 11 print('不好意思 我尽力 没找到') 12 return 13 # 先获取中间位置索引值 14 middle_index = len(l) // 2 # 8 15 # 判断中间索引对应的值比目标值大还是小 16 if target_num > l[middle_index]: 17 # 说明要找的元素只可能出现在列表的右侧 18 l_right = l[middle_index + 1:] # l[9:] 19 print(l_right) 20 my_partner(target_num, l_right) 21 elif target_num < l[middle_index]: 22 # 说明要找的元素只可能出现在列表的左侧 23 l_left = l[:middle_index] 24 print(l_left) 25 my_partner(target_num, l_left) 26 else: 27 print('找到了', target_num) 28 # my_partner(444, l) 找不到 需要添加结束条件 29 # my_partner(11, l) # 要查找的元素在开头 那么还没有依次查找的效率高
三元表达式
1 # def my_max(a, b): 2 # if a > b: 3 # return a 4 # else: 5 # return b
当功能需求仅仅是二选一的情况下 那么推荐使用三元表达式
1 # def my_max(a, b): 2 # return a if a > b else b
条件成立采用if前面的值 if 条件 else 条件不成立采用else后面的值
三元表达式尽量不要嵌套使用
# res = '干饭' if 10 > 2 else '不干饭' # print(res) # res = '干饭' if 10 > 2 else ('不管饭' if 2 >5 else '写的啥!') # print(res)
1 # is_free = input('电影是否收费(y/n)>>>:').strip() 2 # if is_free == 'y': 3 # print('收费') 4 # else: 5 # print('免费') 6 # print('收费' if is_free == 'y' else '免费') 7 username = input('username>>>:') 8 res = 'NB' if username == 'jason' else 'SB' 9 print(res)
列表生成式
1 name_list = ['jason', 'kevin', 'tony', 'jerry'] 2 # 给列表中所有的人名加上_DSB后缀 3 '''传统做法''' 4 # 1.定义一个空列表 5 # new_list = [] 6 # 2.for循环老列表 7 # for name in name_list: 8 # 3.生成新的名字 9 # new_name = '%s_DSB'%name 10 # 4.添加到新的列表中 11 # new_list.append(new_name) 12 # print(new_list) 13 '''列表生成式''' 14 # res = ['%s_DSB' % name for name in name_list] 15 # print(res)
传统做法
1 # 1.定义一个空列表 2 # new_list = [] 3 # # 2.for循环老列表 4 # for name in name_list: 5 # # 3.生成新的名字 6 # if name == 'jason': 7 # continue 8 # else: 9 # new_name = '%s_DSB'%name 10 # # 4.添加到新的列表中 11 # new_list.append(new_name) 12 # print(new_list) 13 '''列表生成式''' 14 # res = ['%s_DSB' % name for name in name_list if name != 'jason'] 15 # print(res)
字典生成式
1 # l1 = ['name', 'age', 'hobby'] 2 # l2 = ['jason', 18, 'read'] 3 # new_dict = {} 4 # for i in range(len(l1)): 5 # new_dict[l1[i]] = l2[i] 6 # print(new_dict) 7 8 # count = 0 9 # for i in l1: 10 # print(count,i) 11 # count += 1 12 13 # 枚举 14 ''' 15 enumerate(l1) 16 针对该方法使用for循环取值 每次会产生两个结果 17 第一个是从0开始的数字 18 第二个是被循环对象里面的元素 19 还可以通过start参数控制起始位置 20 ''' 21 # for i, j in enumerate(l1, start=1): 22 # print(i, j) 23 24 25 name_list = ['jason', 'kevin', 'tony', 'jerry'] 26 # res = {i: j for i, j in enumerate(name_list) if j != 'jason'} 27 # print(res) 28 29 # res1 = {i for i,j in enumerate(name_list)} 30 # print(res1,type(res1)) 31 32 33 # 迭代器 34 res2 = (i for i,j in enumerate(name_list)) 35 print(res2)
匿名函数
1 # 匿名函数:没有名字的函数 2 """ 3 语法格式 4 lambda 形参:返回值 5 """ 6 # print(lambda x:x**2) 7 # def index(): 8 # pass 9 # print(index) 10 # print((lambda x: x ** 2)(2)) 11 # res = lambda x: x ** 2 12 # print(res(2)) 13 14 '''匿名函数一般不会单独使用 都是配合其他函数一起使用''' 15 # map() 映射 16 # l = [1, 2, 3, 4, 5, 6, 7, 8, 9] 17 # def index(n): 18 # return n ** 2 19 # print(list(map(lambda x:x**2, l)))
标签:index,name,res,list,列表,内容,print,今日 来源: https://www.cnblogs.com/dingyucom/p/15573973.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。