網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Python3中的map()、reduce()、filter() 這3個(gè)一般是用于對(duì)序列進(jìn)行操作的內(nèi)置函數(shù),它們經(jīng)常需要與 匿名函數(shù) lambda 聯(lián)合起來(lái)使用,我們今天就來(lái)學(xué)習(xí)下。
1.map()
map() 可以用于在函數(shù)中對(duì)指定序列做映射,返回值是一個(gè)迭代器,其使用語(yǔ)法如下:
map(function, *iterables)
上面的第一個(gè)參數(shù) function 指一個(gè)函數(shù),第二個(gè)參數(shù) iterable 指一個(gè)或多個(gè)可迭代對(duì)象,在執(zhí)行過(guò)程中,會(huì)對(duì)可迭代對(duì)象中的每一個(gè)元素調(diào)用 function 函數(shù)做計(jì)算,最后得到一個(gè)新的迭代器對(duì)象,而這個(gè)新的迭代器對(duì)象,會(huì)包含有每次調(diào)用 function 函數(shù)的返回值。
只傳入一個(gè)可迭代對(duì)象
"""計(jì)算列表中每個(gè)元素的三次方"""
def demo_map(x):
return x ** 3
nums = [1, 2, 3, 4, 5]
print(list(map(demo_map, nums))) # 輸出:[1, 8, 27, 64, 125]
# 使用匿名函數(shù)
print(list(map(lambda x: x ** 3, nums))) # 輸出:[1, 8, 27, 64, 125]
傳入多個(gè)可迭代對(duì)象
"""計(jì)算3個(gè)列表中對(duì)應(yīng)下標(biāo)元素的和"""
def demo_map(x, y, z):
return x + y + z
nums1 = [1, 2, 3, 4, 5]
nums2 = [11, 22, 33, 44, 55]
nums3 = [100, 200, 300, 400, 500]
print(list(map(demo_map, nums1, nums2, nums3))) # 輸出:[112, 224, 336, 448, 560]
# 使用匿名函數(shù)
print(list(map(lambda x, y, z: x + y + z, nums1, nums2, nums3))) # 輸出:[112, 224, 336, 448, 560]
2.filter()
filter() 可以用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回值也是一個(gè)迭代器,其使用語(yǔ)法如下:
filter(function or None, iterable)
和 map() 函數(shù)類似,上面的第一個(gè)參數(shù) function 指一個(gè)函數(shù),第二個(gè)參數(shù) iterable 指一個(gè)可迭代對(duì)象,執(zhí)行后會(huì)得到一個(gè)包含每次調(diào)用 function 函數(shù)返回值的迭代器。
"""找出從 -5 到 5 中能被 4 整除的所有整數(shù)"""
def demo_filter(x):
return x % 4 == 0
nums = range(-5, 6)
print(list(nums)) # 輸出:[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
# 傳入None,只返回true的值(0是False,所以被過(guò)濾掉了)
print(list(filter(None, nums))) # 輸入:[-5, -4, -3, -2, -1, 1, 2, 3, 4, 5]
# 傳入正常函數(shù),過(guò)濾出 nums 中能被 4 整除的整數(shù)
print(list(filter(demo_filter, nums))) # 輸出:[-4, 0, 4]
# 使用匿名函數(shù)
print(list(filter(lambda x: x % 4 == 0, nums))) # 輸出:[-4, 0, 4]
針對(duì) map() 和 filter() 函數(shù), 這里有 2 點(diǎn)需要注意:
- map 中必須傳入一個(gè)正常函數(shù),而在 filter 函數(shù)中則可以傳正常函數(shù)或者None,當(dāng)傳入None時(shí),只返回可迭代對(duì)象中所有符合 true 的值
- map 中支持傳多個(gè)可迭代對(duì)象,而在 filter 函數(shù)中則只能傳一個(gè)可迭代對(duì)象
3.reduce()
reduce() 可以用于對(duì)參數(shù)序列中的元素進(jìn)行累積,返回的是一個(gè)值。
在 Python3 中,reduce() 已被從全局名字空間里移除了,如果想要使用它,那么需通過(guò)引入 functools 模塊來(lái)調(diào)用 reduce() 函數(shù),其使用語(yǔ)法如下:
from functools import reduce
reduce(function, sequence[, initial])
上面的第一個(gè)參數(shù) function 指一個(gè)函數(shù),并且該函數(shù)必須含有2個(gè)參數(shù),第二個(gè)參數(shù) sequence 指一個(gè)序列,第三個(gè)參數(shù) initial 指初始值,默認(rèn)是None。
例如存在函數(shù):reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]),它就相當(dāng)于 ((((1+2)+3)+4)+5)。
"""計(jì)算 1-100 所有整數(shù)之和"""
'''
學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書!
'''
from functools import reduce
def demo_reduce(x, y):
return x + y
nums = range(1, 101)
print(reduce(demo_reduce, nums)) # 輸出:5050
# 使用匿名函數(shù)
print(reduce(lambda x, y: x + y, nums)) # 輸出:5050
# 設(shè)置初始值為 1000
print(reduce(lambda x, y: x + y, nums, 1000)) # 輸出:6050
上面的 map()、reduce()、filter() 都是屬于Python3中的高階函數(shù),它們最大的好處在于可以讓代碼更加簡(jiǎn)潔,當(dāng)然,如果不使用它們,我們也可以通過(guò)其他方式來(lái)實(shí)現(xiàn)。
原文鏈接:https://blog.csdn.net/qdPython/article/details/126143564
相關(guān)推薦
- 2022-08-22 C++示例詳解Prim算法與優(yōu)先隊(duì)列_C 語(yǔ)言
- 2022-04-27 jquery實(shí)現(xiàn)移動(dòng)端懸浮拖拽框_jquery
- 2022-04-27 python?數(shù)據(jù)挖掘算法的過(guò)程詳解_python
- 2022-11-07 Docker搭建MySQ主從復(fù)制原理_docker
- 2022-09-29 ASP.NET?MVC實(shí)現(xiàn)多選下拉框保存并顯示_實(shí)用技巧
- 2022-06-08 記錄linux ens33網(wǎng)卡啟動(dòng)失敗的問(wèn)題
- 2022-11-13 詳解Redis?Stream做消息隊(duì)列_Redis
- 2022-04-22 npm WARN postcss-modules@4.2.2 requires a peer of
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支