mep reduce filter sorted 匿名函式 以及遞迴的應用
阿新 • • 發佈:2020-12-16
四大高階函式
- map
- reduce
- filter
- sorted
目標
掌握map函式、reduce函式、filter函式、sorted函式
步驟
1.map函式
- 根據提供的函式對指定序列做對映
map(function, iterable, ...)
- 使用可迭代物件(指定的序列)中的每個元素呼叫函式,將返回值作為新可迭代物件元素;返回值為新的可迭代物件。
def my_add(item):
return item + 10
result = map(my_add, [1,2,3,4,5,6])
result2 = list(result)
print(result2)
- map函式的引數第一個為自定義的函式,這裡沒有括號
- 第二個引數不僅僅是列表型別,只要為可迭代物件即可
- map函式的返回值為map型別,如果想要拿到裡面的資料,①可以使用list()強轉;②for迴圈遍歷
2.reduce函式
- 對指定的序列內的元素進行累積
reduce(function, sequence [, initial] ) -> value
function引數是一個有兩個引數的函式,reduce依次從sequence中取一個元素,和上一次呼叫
function的結果做引數再次呼叫
function`。
from functools import reduce
def my_add(a, b):
return a * b
result = reduce(my_add, [1,2,3,4])
print(result)
- reduce需要先進行匯入模組 functools import reduce
- 定義函式,此函式需要有兩個引數(規則函式)
- reduce(函式名, 序列)
- reduce返回的結果為int型別,可以直接使用
3.filter函式
- 根據條件,過濾掉不符合條件的元素,最終返回一個迭代器物件
list01 = [1,2,3,4,5,6,7,8,9]
def find_num(item):
if item % 2 == 0:
return True
else:
return False
- filter函式的作用:
- 將可迭代物件的元素依次傳入的指定的函式中,如果可迭代物件的單個元素傳入後,函式返回True,則這個元素被保留下來,如果一個元素傳入函式後,函式返回False,則這個元素被拋棄掉,最終保留下來的所有元素放置到一個迭代器中,filter可以實現篩選的功能。
4.sorted函式
- 對所有可迭代物件進行排序操作
sorted(iterable, key=abs, reverse=False)
- sort 與 sorted 之間的區別
sort 是應用在list上的方法,sorted可以對所有可迭代喜愛那個進行排序操作
list 的 sort 方法返回的是對已經存在的列表進行操作,而內建的函式sorted 方法返回的是一個新的list,而不是在原來的基礎上進行的操作。
# t1 = (1,2,6,8,5,4,3)
# ret = tuple(sorted(t1))
# print(ret)
s = "adfskjlsjafuz"
ret = sorted(s)
print(ret)
- 匿名函式
- lambda表示式
步驟
1.匿名函式的介紹
定義函式使用def關鍵字, python還提供一種生成函式物件的表示式形式---匿名函式(lambda表示式)
lambda表示式能建立一個可呼叫的函式, 其返回函式本身而不是賦值給一個變數名, 這就是為什麼lambda稱之為匿名函式的原因.
2.匿名函式的格式
lambda表示式的語法:
lambda argument_list: expression
-
argument_list是引數列表。他的結構與Python函式中的引數列表是一樣的,expression是一個關於引數的表示式,並且他們一定是單行的。
-
程式碼案例
def my_add(num1, num2):
print(num1 + num2)
my_add(10, 20)
# lambda 表示式來完成
f = lambda num1, num2: print(num1+num2)
f(10, 20)
f(20, 30)
3.匿名函式的案例
list01 = [10,20,5,4,63,72]
def find_max(obj):
print(max(obj))
find_max(list01)
f = lambda obj: print(max(obj))
f(list01)
1.什麼是遞迴
- 將問題分解為規模更小的相同問題,
- 持續分解,直到問題規模小到可以用非常簡單直 接的方式來解決。
- 遞迴的問題分解方式非常獨特,其演算法方面的明
- 顯特徵就是:在演算法流程中呼叫自身。
2.問題回顧
給定一個列表,返回所有數的和。
(既不能使用for,又不能使用while,同時還不確定列表的長度)
該如何設計程式碼程式
3.問題分析
- 求和實際上最終是由一次次的加法實現的,而加法恰恰有2個運算元
- 將問題規模較大的列表求和,分解為規模較小而且固定的2個數求和(加法)?
- 同樣是求和問題,但規模發生了變化,符合遞迴解決問題的特徵!
4.換個方式來思考
1 + (3 + (5 + ((7 + 9))))
觀察上述過程中所包含的重複模式,可以把求和問題歸納
數列的和 = “首個數” + “餘下數列” 的 和
如果數列包含的數少到只有1個的話,它的和就是這個數了 (這是規模小到可以做最簡單的處理)