lambda函數,內置map()函數及filter()函數


8.1 lambda函數

作用及意義:
 1.沒必要專門定義函數,給函數起名,起到精簡的效果
 2.簡化代碼的可讀性
def ds(x):
    return 2 * x + 1

ds(5)
---11

g = lambda x : 2 * x + 1                                      
g(5)
---11

def add(x,y):
    return x + y

add(3,4)
---7

g = lambda x,y : x + y
g(3,4)
---7

 常用的內置函數(BIF函數)

①  filter()     ------過濾器
list (filter(None,[1,0,False,True]))
---[1, True]             #把任何非True的內容給過濾掉了


#利用filter寫一個奇數的過濾器
def odd(x):
    return x % 2
temp = range(10)
show = filter(odd,temp)
list(show)
---[1,3,5,7,9]

  
list (filter(lambda x : x % 2 , range(10)))
---[1,3,5,7,9]


def aaa(x):
    return x % 2 == 1
ret = list(filter(aaa, [1, 2, 54, 3, 6, 8, 17, 9]))
print(ret)
---[1, 3, 17, 9]
l = [15, 24, 31, 14]
def func(x):
    return x > 20
print(list(filter(func,l)))

print(list(filter(lambda x: x > 20, l)))      # 比較兩者差異

map()   -----映射

map有兩個參數,一個函數,一個可迭代序列, 將序列中的每一個元素作為函數參數進行運算加工
直到可迭代序列中的每個元素加工完畢返回所有加工后的元素構成的新序列。
list(map(lambda x : x * 2, range(10)))
---[0, 2, 4, 6, 8, 10, 12, 14, 16, 18
l = [1, 2, 3, 4, 5]

def pow2(x):
    return x*x

print(list(map(pow2, l)))
---[1, 4, 9, 16, 25]
l = [1, 2, 3, 4]

def func(x):
    return x*x
print(list(map(func, l)))

print(list(map(lambda x : x*x, l)))     # 比較兩者差異
# 多個數組進行相加
li = [11, 22, 33] sl = [1, 2, 3] new_list = map(lambda a, b: a + b, li, sl) print(new_list)
---[12, 24, 36] # 這里在py2中結果是這個,在py3中是一個可迭代對象,需要調用list函數

 ③ reduce()函數

  也是存在兩個參數,一個函數,一個可迭代序列,但是函數必須接收兩個參數。作用是對於序列內所有元素進行累積操作

from functools import reduce    # 在py2中不需要從functools中導入,但是在py3中需要,他已經不屬於一個內置函數,屬於一個高階函數
lst = [11,22,33]
func2 = reduce(lambda arg1,arg2:arg1+arg2,lst)
print('func2:', func2)

---func2: 66

例題:

# 現有兩個元組(('a'),('b')),(('c'),('d')),請使用python中匿名函數生成列表[{'a':'c'},{'b':'d'}]

# 方法一
t1 = (('a'), ('b'))
t2 = (('c'), ('d'))
print(list(zip(t1, t2)))                           # [('a', 'c'), ('b', 'd')]
print(list(map(lambda t: {t[0], t[1]}, zip(t1, t2))))             # [{'a', 'c'}, {'d', 'b'}]

# 方法二
print(list([{i,j} for i,j in zip(t1,t2)]))                # [{'a', 'c'}, {'d', 'b'}]

#方法三
func = lambda t1,t2:[{i,j} for i,j in zip(t1,t2)]
ret = func(t1,t2)
print(ret)                                          # [{'a', 'c'}, {'d', 'b'}]

 


免責聲明!

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



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