map內置函數、lambda表達式、快捷生成想要的列表、filter內置函數


  map函數                            

語法

  map(function, iterable, ...)

參數

  • function -- 函數,有兩個參數
  • iterable -- 一個或多個序列

返回值

  Python 2.x 返回列表。

  Python 3.x 返回迭代器。

1 def square(x) :            # 計算平方
2     return x ** 2
3 
4 map(square, [1,2,3,4,5])   # 計算列表各個元素的平方
5 
6 # 使用lambda表達式
7 map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函數
8 
9 map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

  lambda                            

使用lambda表達式實現三目運算符

1 # 要實現的效果
2 if 0 == 0:
3     name = "timo"
4 else:
5     name = "nana"
6 
7 # lambda實現   如果if條件成立,name等於if前面的值,否則等於后面的
8 name = "timo" if 0 == 0 "nana"

使用lambda表達式實現簡單的函數

 1 # 要實現的效果
 2 def func(arg):
 3     return arg + 1
 4 
 5 # 執行
 6 func(123)
 7 
 8 
 9 # 使用lambda表達式實現 lambda后面緊跟着的是函數的參數,冒號后面跟着的是返回值
10 lambda_func = lambda arg: arg + 1
11 
12 # 執行
13 lambda_func(123)

  快捷生成想要的列表                        

生成一個步長為5的列表

1 arr = [x*5 for x in range(5)]
2 # 得到結果
3 arr = [0, 5, 10, 15, 20]

結合lambda表達式生成列表

 1 # 第一種情況
 2 f0, f1, f2 = [lambda m: m*i for i in range(3)]
 3 
 4 f0(1) == f1(1) == f2(1) == 2
 5 
 6 
 7 # 第二種情況
 8 
 9 f = [lambda m: m*i for i in range(3)]
10 
11 for l in f:
12     l(1),    
13 
14 # 結果 2 2 2
15 
16 
17 # 第三種情況
18 
19 f = (lambda m: m*i for i in range(3))
20 
21 for l in f:
22     l(1),    
23 
24 # 結果 0 1 2
25 
26 
27 # 第四種情況
28 
29 f0, f1, f2 = (lambda m: m*i for i in range(3))
30 
31 f0(1) == f1(1) == f2(1) == 2

關於上面四種情況出現不同結果的原因

第三種情況不是元組,而是返回一個生成器,在調用 l(1)  的時候,是在生成器執行過程之中,所以函數 l  中的 i 變量隨着生成器的迭代在變化,所以最終結果會有變化。
而第四種情況一下把生成器迭代完了,和第一第二種類似,都是所有代碼都執行完了,i 都處於最后一個值 2, 所以值沒有變化.

  filter內置函數                            

描述

  filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

  該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然后返回 True 或 False,最后將返回 True 的元素放到新列表中。

語法

    filter(function, iterable)

參數

 

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回值

  返回列表。

實例

 

1 def fun(s):
2     if s != 'a':
3         return s
4 str = ['a', 'b', 'c']
5 res = filter(fun, str1)            #過濾到字符a
6 
7 print(res)            #返回一個可迭代對象

 


免責聲明!

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



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