十、lambda表達式、內置函數之filter、map、reduce


lambda表達式
 
學習條件運算時,對於簡單的 if else 語句,可以使用三元運算來表示,即:
# 普通條件語句
if 1 == 1:
name = 'wupeiqi'
else:
name = 'alex'
# 三元運算
name = 'wupeiqi' if 1 == 1 else 'alex'
對於簡單的函數,也存在一種簡便的表示方式,即:lambda表達式
 
# ###################### 普通函數 ######################
# 定義函數(普通方式)
def func1(arg):
  return arg + 1
 
# 執行函數
func1(123)
 
# ###################### lambda ######################
 
# 定義函數(lambda表達式)
func2 = lambda arg : arg + 1
 
# 執行函數
func2(123)
 
lambda存在意義就是對簡單函數的簡潔表示,也支持傳遞多個參數,也支持動態參數,如下:
func3 = lambda a,b: a + b
func3(11,12)
==============================================================================
 
map方法:
遍歷序列,對序列中每個元素進行操作,最終獲取新的序列,如:
 
每個元素增加100
li = [11,22,33]
def func(arg):
  return arg +100
new_list = map(func,li)
print (new_list)
 
更簡便用lambda表達式來做:
li = [11, 22, 33]
new_list = map(lambda a: a + 100, li)
 
 
兩個列表對應元素相加
li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)
================================================================================
filter方法:
對於序列中的元素進行篩選,最終獲取符合條件的序列,如:
獲取列表中大於12的所有元素集合
li = [11, 22, 33]
new_list = filter(lambda arg: arg > 22, li)
#filter第一個參數為空,將獲取原來序列,filter內部默認只取值為true的值
以取10以內的所有奇數為例:一行命令搞定
list(filter(lambda x : x % 2,range(10)))
[1,3,5,7,9]
===============================================================================
reduce方法:
from functools import reduce
對於序列內所有元素進行累計操作,如:
獲取序列所有元素的和
li = [11, 22, 33,44,55,66,77,88,99]
result = reduce(lambda arg1, arg2: arg1 + arg2, li)
# reduce的第一個參數,函數必須要有兩個參數
# reduce的第二個參數,要循環的序列
# reduce的第三個參數,初始值
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM