遞迴函式,演算法(二分法),三元表示式,列表生成式、字典生成式,匿名函式
阿新 • • 發佈:2021-12-06
遞迴函式
遞迴:函式在執行過程中,直接或者間接的呼叫了自身(python預設的最大遞迴深度為1000次)
1.遞推
一層層往下推導答案(每次遞迴之後複雜度相較於上一次一定要有所下降)
2.回溯
依據最後的結論往後推匯出最初需要的答案
遞迴一定要有結束條件!!!
演算法之二分法
演算法:解決問題的高效方法
# 二分法能夠使用的場景,資料集必須有序 l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111] def my_partner(target_num,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) eliftarget_num<l[middle_index]: # 說明要找的元素只可能出現在列表的左側 l_left=l[:middle_index] print(l_left) my_partner(target_num,l_left) else: print('找到了',target_num) my_partner(321,l) my_partner(11,l) # 要查詢的元素在開頭,那麼還沒有依次查詢的效率高
三元表示式
""" 條件成功採用if前面的值 if 條件 else 條件不成立採用else後面的值""" is_free=input('電影是否收費(y/n)>>>:').strip() print('收費' if is_free=='y' else '免費')
列表生成式
name_list = ['jason', 'kevin', 'tony', 'jerry'] '''傳統做法''' new_list=[] for name in name_list: if name=='jason': continue else: new_name='%s_DSB' % name 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 = {} for i in range(len(l1)): new_dict[l1[i]] = l2[i] print(new_dict) ''' enumerate(l1) 針對該方法使用for迴圈取值,每次會產生兩個結果 第一個是從0開始的數字 第二個是被迴圈物件裡面的元素 還可以通過start引數控制起始位置 ''' for i,j in enumerate(l1,start=1): print(i,j) name_list = ['jason', 'kevin', 'tony', 'jerry'] res = {i: j for i, j in enumerate(name_list) if j != 'jason'} print(res)
匿名函式
匿名函式:沒有名字的函式
""" 語法格式 lambda 形參:返回值 匿名函式一般不會單獨使用,都是配合其他函式一起使用 """ l=[1,2,3,4,5,6,7,8,9] print(list(map(lambda x:x**2,l))) # [1, 4, 9, 16, 25, 36, 49, 64, 81]