python中lambda以及与filter/map/reduce结合的用法
一、lambda函數即匿名函數,和普通的函數相比,就是省去了函數名稱而已;
lambda語句中,冒號前是參數,可以有多個,用逗號隔開,冒號右邊是函數體的返回值
g = lambda x,y : x+y print g(1,2)與函數等同:
def f(x,y):return x+y print f(1,2)二、lambda函數作用:
使用Python寫一些執行腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡。
對于一些抽象的,無需復用的函數,使用lambda不需要考慮命名的問題。
使用lambda在某些時候讓代碼更容易理解。
三、應用
A、與filter結合
filter() 函數用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
語法
以下是 filter() 方法的語法:
filter(function, iterable)參數
- function – 判斷函數。
- iterable – 可迭代對象,每個元素作為參數傳遞給函數進行判
返回值
最后將判斷函數返回 True 的元素放到新列表中。
python2中返回的是過濾后的列表, 而python3中返回到是一個filter類
filter類實現了__iter__和__next__方法, 可以看成是一個迭代器, 有惰性運算的特性, 相對python2提升了性能, 可以節約內存.
舉例:過濾出列表中的所有奇數:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #!/usr/bin/python # -*- coding: UTF-8 -*- def is_odd(n):return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(newlist)結果:[1, 3, 5, 7, 9] <filter object at 0x0000022EC66BB128>(python3)使用lambda
a = filter(lambda x: x % 2 == 1, range(10)) print(a)B、與reduce結合
reduce() 函數會對參數序列中元素進行累積。
reduce() 函數語法:
reduce(function, iterable[, initializer])函數將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:。
參數
- function – 函數,有兩個參數
- iterable – 可迭代對象
- initializer – 可選,初始參數
返回值
用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,返回最后得到一個結果
舉例:列表數據相加
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' >>>def add(x, y) : # 兩數相加return x + y ... >>> reduce(add, [1,2,3,4,5]) # 計算列表和:1+2+3+4+5 15使用lambda
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數 15C、與map結合
map() 會根據提供的函數對指定序列做映射。
語法
map() 函數語法:
map(function, iterable, ...)參數
- function – 函數,有兩個參數
- iterable – 一個或多個序列
返回值
第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表
Python 2.x 返回列表。
Python 3.x 返回迭代器。
實例
以下實例展示了 map() 的使用方法:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' >>>def square(x) : # 計算平方數return x ** 2>>> map(square, [1,2,3,4,5]) # 計算列表各個元素的平方[1, 4, 9, 16, 25]使用lambda
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函數 [1, 4, 9, 16, 25] # 提供了兩個列表,對相同位置的列表數據進行相加 >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) [3, 7, 11, 15, 19]在對象遍歷處理方面,其實Python的for…in…if語法已經很強大,并且在易讀上勝過了lambda。
總結
以上是生活随笔為你收集整理的python中lambda以及与filter/map/reduce结合的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的垃圾回收机制和析构函数__
- 下一篇: python对字符串(内嵌的字典)转为字