# Lambda - 以一行陳述式來表示的匿名函式 - 可以取代一般的小函式 函式改寫 ```python3= #原式 def square(x): return x**2 #先改成一行 def square(x): return x**2 #將def換成lambda lambda square(x): return x**2 #將函式名字與括號去除 lambda x: return x**2 #刪掉return lambda x: x**2 #也可以指定給變數 square = lambda x: x**2 ``` ## 應用 - map 函式 ```python= #map(function, list) #將每個list內的成員都經過function的計算並回傳 def triple(x): return x**3 numbers = [x for x in range(1,9)] print(list(map(triple, numbers))) #map韓式的輸出為map object,若要印出數值須先轉為list #將triple用lambda取代 print(list(map(lambda x: x**3, numbers))) #[1, 8, 27, 64, 125, 216, 343, 512] ``` - filter 函式 ```python3= numbers = [x for x in range(1,21)] print(list(filter(lambda x: x%2 == 0, numbers))) #只有符合x%2 ==0的x會被回傳 #filter的結果也要先轉為list才能輸出數值 #[2, 4, 6, 8, 10, 12, 14, 16, 18, 20] ``` - all(list)尋找list中的值是否全部皆為True - any(list)尋找list中是否出現至少一次True ```python3= #確認list內的數是否都能被2整除 nlist = [x for x in range(1,30) if x%2 ==0] print(all(nlist)) #True #回傳的是布林值所以不需特別用list包裝 #Generator expression的寫法較快,不會真正產生一個list #去掉[] print(any(x for x in range(50) if x%3 == 0)) #True print(any(x for x in range(50) if x%3 == 6)) #False(因為是空集合) ``` - sorted(list) -- 和list專用的.sort()不同,.sort()會直接改變原本list內的成員(由小到大排列) -- sorted的結果需要用變數接起來,且不會改變原本list內容 ```python= #將播放順序依照少到多排列 songs = [ {"title":"love story", "playcount":15}, {"title":"speak now", "playcount":8}, {"title":"me!", "playcount":22}, {"title":"sparks fly", "playcount":5}, {"title":"wonderland", "playcount":30} ] print(sorted(songs, key = lambda x:x["playcount"])) #將播放順序依照多到少排列 print(sorted(songs, key = lambda x:x["playcount"], reverse = True)) #[{'title': 'wonderland', 'playcount': 30}, {'title': 'me!', 'playcount': 22}, {'title': 'love story', 'playcount': 15}, {'title': 'speak now', 'playcount': 8}, {'title': 'sparks fly', 'playcount': 5}] ``` - max(list)與min(list) ```python= #利用max與min來找播放次數最多與最少的歌曲 print(max(songs,key = lambda x: x["playcount"])) #{'title': 'wonderland', 'playcount': 30} print(min(songs,key = lambda x: x["playcount"])) #{'title': 'sparks fly', 'playcount': 5} #因為回傳的值是一個字典,所以直接在後方輸入key就可以得到曲名 print(max(songs,key = lambda x: x["playcount"])['title']) #wonderland ```