sum、map、lambda 函式
阿新 • • 發佈:2022-05-08
sum() 函式
- 描述
sum()函式是對可迭代物件序列進行求和的計算方法 - 語法
sum(iterable[,start])
其中iterable為可迭代的物件,比如 list,tuple或者dict等
sum函式最後的值=可迭代物件裡的數相加的和+start的值,start不寫的話預設為0
>>> sum([2,4,6,8])
20
>>> sum([2,4,6,8],2)
22
map() 函式
- 描述
map()是 Python 內建的高階函式,它接收一個函式 f 和一個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回給迭代器。 - 語法
map(function,iterable,...)
function -- 函式
iterable -- 一個或多個可迭代序列
返回值 -- 返回迭代器 (返回迭代器意味著print時候需要再轉化為list輸出)
舉例
- 例1
對於list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把list的每個元素都作平方,就可以用map()函式:
因此,我們只需要傳入函式square(x)=x**2,就可以利用map()函式完成這個計算:
def square(x): return x**2 print(list(map(square, [1, 2, 3, 4, 5, 6, 7, 8, 9]))) 輸出結果: [1, 4, 9, 10, 25, 36, 49, 64, 81]
注意:map()函式不改變原有的 list,而是返回一個新的 list。
利用map()函式,可以把一個 list 轉換為另一個 list,只需要傳入轉換函式。
由於list包含的元素可以是任何型別,因此,map() 不僅僅可以處理只包含數值的 list,事實上它可以處理包含任意型別的 list,只要傳入的函式f可以處理這種資料型別。
- 例2
我們也可以利用map()來進行不同資料型別之間的轉換,比如
把 str1='12345'轉為列表型別
# 將 字串str 型別轉為 列表list >>> str1='12345' >>> result=map(int,str1) print(list(result)) [1, 2, 3, 4, 5]
lambda() 函式
lambda表示式時python中一類特殊定義的函式形式,使用它可以定義一個匿名函式,當你需要一個函式但又不想單獨命名和定義它的時候,使用lambda就會非常方便。
lambda函式可以包含任意多的引數,但是函式體部分只能包含一個表示式。此外,lambda函式用一行程式碼寫成,並且被立即呼叫。
-
語法
lambda [arg1 [,arg2,.....argn]]:expression
關鍵字 lambda
引數 arg1,arg2...
函式體 expression -
例子
#普通函式
>>> def func(a,b,c):
return a+b+c
>>> print(func(1,2,3))
6
# lambda 匿名函式
>>> f = lambda a,b,c: a+b+c # 在程式碼:f = lambda a,b,c: a+b+c 中,lambda表示匿名函式,冒號 “:”之前的a,b,c表示它們是這個函式的引數。
>>> print(f(1,2,3)) #匿名函式不需要return來返回值,表示式本身結果就是返回值。
6
sum()、map()和lambda()函式經常配合使用,如下面例子
給一個列表 如 lst1=[1,2,3,4,5],求列表裡每一個元素的平方和
# 普通函式
def square_sum(numbers):
sum=0
for i in numbers:
sum += i ** 2
return sum
print(square_sum([1,2,3,4,5]))
55
# sum lambda map配合使用
def square_sum(numbers):
return sum(map(lambda x:x**2, numbers))
print(square_sum([1,2,3,4,5]))
# 推導式寫法
def square_sum(numbers):
return sum(x**2 for x in numbers)
print(square_sum([1,2,3]))