溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python3中map()、reduce()、filter()怎么使用

發(fā)布時(shí)間:2022-08-04 15:50:24 來源:億速云 閱讀:109 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Python3中map()、reduce()、filter()怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python3中map()、reduce()、filter()怎么使用”吧!

1.map()

map() 可以用于在函數(shù)中對(duì)指定序列做映射,返回值是一個(gè)迭代器,其使用語法如下:

map(function, *iterables)

上面的第一個(gè)參數(shù) function 指一個(gè)函數(shù),第二個(gè)參數(shù) iterable 指一個(gè)或多個(gè)可迭代對(duì)象,在執(zhí)行過程中,會(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() 可以用于過濾序列,過濾掉不符合條件的元素,返回值也是一個(gè)迭代器,其使用語法如下:

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,所以被過濾掉了)
print(list(filter(None, nums)))  # 輸入:[-5, -4, -3, -2, -1, 1, 2, 3, 4, 5]

# 傳入正常函數(shù),過濾出 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() 已被從全局名字空間里移除了,如果想要使用它,那么需通過引入 functools 模塊來調(diào)用 reduce() 函數(shù),其使用語法如下:

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í)中遇到問題沒人解答?小編創(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ù),它們最大的好處在于可以讓代碼更加簡潔,當(dāng)然,如果不使用它們,我們也可以通過其他方式來實(shí)現(xiàn)。

到此,相信大家對(duì)“Python3中map()、reduce()、filter()怎么使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI