Python reduce / map / filter 函數(shù)區(qū)別 - Python零基礎(chǔ)入門教程

目錄

零基礎(chǔ) Python 學(xué)習(xí)路線推薦 : Python 學(xué)習(xí)目錄 >> Python 基礎(chǔ)入門

Pythonreduce / map / filter 三個函數(shù)很容易搞混淆,雖然利用函數(shù)對迭代器或者序列中的元素操作,但是適用的場景卻各不相同;

一.map 函數(shù)

map 函數(shù)特點(diǎn):對可迭代器或者序列中的每個元素進(jìn)行相同的操作(例如每個元素+1 等等),并返回迭代器或者列表,示例如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python reduce / map / filter 函數(shù)區(qū)別.py
@Time:2021/05/18 07:37
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

def func1(x):
    # 將每一個元素計算平方值
    print("x=%d x*x=%d"%(x,x*x))
    return x*x

if __name__ == "__main__":
    list1 = [1,2,3,4,5]
    #方法一:
    value = map(func1,list1) #返回map對象,可以強(qiáng)制轉(zhuǎn)為list列表
    print(list(value))

    print("***"*20)
    #方法二:
    value = map(lambda x:x*x, list1)  #返回map對象,可以強(qiáng)制轉(zhuǎn)為list列表
    print(list(value))


'''
輸出結(jié)果:

x=1 x*x=1
x=2 x*x=4
x=3 x*x=9
x=4 x*x=16
x=5 x*x=25
[1, 4, 9, 16, 25]
************************************************************
[1, 4, 9, 16, 25]
'''

值得注意的是:map 函數(shù)返回值是迭代器,注意返回的結(jié)果只能迭代一次,如果需要多次使用請?zhí)崆氨4娼Y(jié)果并處理,例如:

def func1(x):
    # 將每一個元素計算平方值
    # print("x=%d x*x=%d"%(x,x*x))
    return x*x

if __name__ == "__main__":
    list1 = [1,2,3,4,5]
    value = map(func1,list1) #返回map對象,可以強(qiáng)制轉(zhuǎn)為list列表
    print(list(value))
    print(list(value))

'''
輸出:

[1, 4, 9, 16, 25]
[]
'''

很懵逼是不是?明明沒什么錯誤,為什么第二次輸出就是空列表呢?因?yàn)?map 函數(shù)返回的迭代器只能迭代一次,解決辦法:在獲取結(jié)果的時候強(qiáng)轉(zhuǎn)為 list 列表 即可,實(shí)例如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python reduce / map / filter 函數(shù)區(qū)別.py
@Time:2021/05/18 07:37
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

def func1(x):
    # 將每一個元素計算平方值
    # print("x=%d x*x=%d"%(x,x*x))
    return x*x

if __name__ == "__main__":
    list1 = [1,2,3,4,5]
    value = list(map(func1,list1)) #返回map對象,可以強(qiáng)制轉(zhuǎn)為list列表
    print(list(value))
    print(list(value))

'''
輸出:

[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
'''

二.reduce 函數(shù)

reduce 函數(shù)特點(diǎn):從左到右對一個序列的項累計地應(yīng)用有兩個參數(shù)的函數(shù),以此合并序列到一個單一值(例如累加或累乘列表元素等等),返回最終的計算結(jié)果,是一個值,示例如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python reduce / map / filter 函數(shù)區(qū)別.py
@Time:2021/05/18 07:37
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

#python3在使用reduce函數(shù)時需要導(dǎo)入模塊

from functools import reduce # 導(dǎo)入模塊

def func1(x,y):
    # 把上一次計算的結(jié)果作為下一次的計算的輸入
    print("x=%d y=%d x*y=%d"%(x,y,x*y))
    return x*y

if __name__ == "__main__":
    list1 = [1,2,3,4,5]
    #方法一:
    value = reduce(func1,list1) #等價 1*2*3*4*5 = 120
    print(value)
    print(type(value))

    print("***"*20)
    #方法二:
    value = reduce(lambda x,y:x*y, list1)  # 等價 1*2*3*4*5 = 120
    print(value)
    print(type(value))

'''
輸出結(jié)果:

x=1 y=2 x*y=2
x=2 y=3 x*y=6
x=6 y=4 x*y=24
x=24 y=5 x*y=120
120
<class 'int'>
************************************************************
120
<class 'int'>
'''

三.filter 函數(shù)

filter 函數(shù)特點(diǎn):對可迭代對象中的元素按照特定的條件進(jìn)行篩選(例如篩選列表中所有的偶數(shù)等等),示例如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python reduce / map / filter 函數(shù)區(qū)別.py
@Time:2021/05/18 07:37
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""


lis=[0,1,2,3,4,5,6]

#定義篩選偶數(shù)的普通函數(shù)
def func4(x):
    return x%2==0

#第一種使用filter函數(shù)的方式---lambda
res5=filter(lambda x:x%2==0,lis)
print(list(res5))
print(list(res5))
print("***"*20)


#第二種使用filter函數(shù)的方式---普通函數(shù)二
res7=filter(func4,lis)
print(list(res7))
print(list(res7))

'''
輸出結(jié)果:

[0, 2, 4, 6]
[]
************************************************************
[0, 2, 4, 6]
[]
'''

懵逼?事實(shí)證明,filter 函數(shù)返回的結(jié)果也和 map 函數(shù)一樣,只能迭代一次,解決方案和 map 的解決方案一樣,在獲取結(jié)果的時候強(qiáng)轉(zhuǎn)為** list 列表** 即可;

四.猜你喜歡

  1. Python 條件推導(dǎo)式
  2. Python 列表推導(dǎo)式
  3. Python 字典推導(dǎo)式
  4. Python 不定長參數(shù) *argc/**kargcs
  5. Python 匿名函數(shù) lambda
  6. Python return 邏輯判斷表達(dá)式
  7. Python is 和 == 區(qū)別
  8. Python 可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型
  9. Python 淺拷貝和深拷貝
  10. Python 異常處理
  11. Python 線程創(chuàng)建和傳參
  12. Python 線程互斥鎖 Lock
  13. Python 線程時間 Event
  14. Python 線程條件變量 Condition
  15. Python 線程定時器 Timer
  16. Python 線程信號量 Semaphore
  17. Python 線程障礙對象 Barrier
  18. Python 線程隊列 Queue – FIFO
  19. Python 線程隊列 LifoQueue – LIFO
  20. Python 線程優(yōu)先隊列 PriorityQueue
  21. Python 線程池 ThreadPoolExecutor(一)
  22. Python 線程池 ThreadPoolExecutor(二)
  23. Python 進(jìn)程 Process 模塊
  24. Python 進(jìn)程 Process 與線程 threading 區(qū)別
  25. Python 進(jìn)程間通信 Queue / Pipe
  26. Python 進(jìn)程池 multiprocessing.Pool
  27. Python GIL 鎖

未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? Python reduce / map / filter 函數(shù)區(qū)別

本文由博客 - 猿說編程 猿說編程 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容