1. 程式人生 > 其它 >遞迴函式,演算法(二分法),三元表示式,列表生成式、字典生成式,匿名函式

遞迴函式,演算法(二分法),三元表示式,列表生成式、字典生成式,匿名函式

遞迴函式

遞迴:函式在執行過程中,直接或者間接的呼叫了自身(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) elif
target_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]