1. 程式人生 > 其它 >sum、map、lambda 函式

sum、map、lambda 函式

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]))