欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3的map與reduce實例詳解

 更新時間:2024年01月25日 09:59:29   作者:涼拌豌豆尖  
這篇文章主要介紹了Python3中map()、reduce()、filter()的用法詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

python3的map與reduce

一個月前,我同學去面試python開發(fā)崗,面試官給他出了一道題,使用三種不同的方法實現1到100的求和,并且要求語法盡量簡潔。同學的代碼如下

#第一種
sum1 = 0
for i in range(1,101):
    sum1+=i
print(sum1)
#第二種
print(sum(range(1,101)))
#第三種
print(reduce(lambda x,y:x+y,range(1,101)))

這三種方法得到的結果都為5050
寫完這個代碼以后,我同學下午就收到了offer(當然是因為他薪資要得比較低的原因?。。。?br />聽了我同學的傳奇經歷,我決定好好的學一學python的哪些內建函數。
在此之前,我們需要了解一下lamba。

1:lambda

lambda作為一個表達式,定義了一個匿名函數,使用lambda簡化了函數定義的書寫形式。使代碼更為簡潔,使函數的定義方式更為直觀,易理解。
舉個例子,平時我們手寫一個函數實現兩個數的求和,通常這樣寫:

    def f(x,y):
        return x+y
    print(1,2)

但是使用lambda可以寫成這樣:

    f = lambda x,y:x+y
    print(f(1,2))

這里lambda作為一個表達式,定義了一個匿名函數,上例的代碼x,y為入口參數,x+y為函數體,其結果就是返回x+y的和。

上面兩個代碼返回的結果都一樣,但是使用lambada更為簡潔。
lambda與map,reduce等python內建函數配合使用能發(fā)揮更強大的作用。

2:map

map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,并通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 并返回。(python3中返回的是迭代器

f = lambda x,y,z:x+y+z
x = map(f,[1,2,3],[4,5,6],[7,8,9])
for i in x:
    print(i)

這段代碼分別將三個列表進行求和,然后返回一個可迭代的對象。
(1+4+7)
(2+5+8)
(3+6+9)

運行結果

或者可以使用list將迭代器轉換為列表

print(list(x)

運行結果
[12, 15, 18]

3:reduce

reduce()函數接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f,并返回最終結果值。
python3使用reduce需要引入

from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101)))

這里以我同學筆試的題目為列子,他先定義了一個lambda表達式,目的是為了求兩個數的和,使用range生成1-100的數,由于reduce對list的每個元素反復調用函數f,并返回最終結果值。
因此,其過程為:
(1,2,3,4,5,6,7,8,9……..100)
1+2=3
3+3=6
6+4=10
10+5=15
………..
這樣執(zhí)行就相當于是執(zhí)行了一次1+2+3+4+…….+100

reduce()還可以接收第3個可選參數,作為計算的初始值。如果把初始值設為100,計算:

print(reduce(lambda x,y:x+y,range(1,101),100))

計算結果為5150

我同學的傳奇經歷到此為止,如果哪位老鐵在面試過程中也遇上過有趣的面試題大家不妨共同分享一下。

補充:

Python3中map()、reduce()、filter()的用法詳解

Python3中的map()、reduce()、filter() 這3個一般是用于對序列進行操作的內置函數,它們經常需要與 匿名函數 lambda 聯合起來使用,我們今天就來學習下。

1.map()

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

map(function, *iterables)

上面的第一個參數 function 指一個函數,第二個參數 iterable 指一個或多個可迭代對象,在執(zhí)行過程中,會對可迭代對象中的每一個元素調用 function 函數做計算,最后得到一個新的迭代器對象,而這個新的迭代器對象,會包含有每次調用 function 函數的返回值。

只傳入一個可迭代對象

"""計算列表中每個元素的三次方"""
def demo_map(x):
    return x ** 3
nums = [1, 2, 3, 4, 5]
print(list(map(demo_map, nums)))  # 輸出:[1, 8, 27, 64, 125]

# 使用匿名函數
print(list(map(lambda x: x ** 3, nums)))  # 輸出:[1, 8, 27, 64, 125]

傳入多個可迭代對象

"""計算3個列表中對應下標元素的和"""
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]

# 使用匿名函數
print(list(map(lambda x, y, z: x + y + z, nums1, nums2, nums3)))  # 輸出:[112, 224, 336, 448, 560]

2.filter()

filter() 可以用于過濾序列,過濾掉不符合條件的元素,返回值也是一個迭代器,其使用語法如下:

filter(function or None, iterable)

和 map() 函數類似,上面的第一個參數 function 指一個函數,第二個參數 iterable 指一個可迭代對象,執(zhí)行后會得到一個包含每次調用 function 函數返回值的迭代器。

"""找出從 -5 到 5 中能被 4 整除的所有整數"""
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]

# 傳入正常函數,過濾出 nums 中能被 4 整除的整數
print(list(filter(demo_filter, nums)))  # 輸出:[-4, 0, 4]

# 使用匿名函數
print(list(filter(lambda x: x % 4 == 0, nums)))  # 輸出:[-4, 0, 4]

針對 map() 和 filter() 函數, 這里有 2 點需要注意:

  • map 中必須傳入一個正常函數,而在 filter 函數中則可以傳正常函數或者None,當傳入None時,只返回可迭代對象中所有符合 true 的值
  • map 中支持傳多個可迭代對象,而在 filter 函數中則只能傳一個可迭代對象

3.reduce()

reduce() 可以用于對參數序列中的元素進行累積,返回的是一個值。

在 Python3 中,reduce() 已被從全局名字空間里移除了,如果想要使用它,那么需通過引入 functools 模塊來調用 reduce() 函數,其使用語法如下:

from functools import reduce
reduce(function, sequence[, initial])

上面的第一個參數 function 指一個函數,并且該函數必須含有2個參數,第二個參數 sequence 指一個序列,第三個參數 initial 指初始值,默認是None。

例如存在函數:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]),它就相當于 ((((1+2)+3)+4)+5)。

"""計算 1-100 所有整數之和"""
'''
學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
from functools import reduce
def demo_reduce(x, y):
    return x + y
nums = range(1, 101)

print(reduce(demo_reduce, nums))  # 輸出:5050
# 使用匿名函數
print(reduce(lambda x, y: x + y, nums))  # 輸出:5050

# 設置初始值為 1000
print(reduce(lambda x, y: x + y, nums, 1000))  # 輸出:6050

上面的 map()、reduce()、filter() 都是屬于Python3中的高階函數,它們最大的好處在于可以讓代碼更加簡潔,當然,如果不使用它們,我們也可以通過其他方式來實現。

到此這篇關于Python3中map()、reduce()、filter()的用法的文章就介紹到這了,更多相關Python3 map()、reduce()、filter()內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 代碼分析Python地圖坐標轉換

    代碼分析Python地圖坐標轉換

    這篇文章主要介紹了Python地圖坐標轉換的相關知識點以及分享了相關的代碼實例,對此有興趣的朋友學習下。
    2018-02-02
  • Python獲取指定字符前面的所有字符方法

    Python獲取指定字符前面的所有字符方法

    下面小編就為大家分享一篇Python獲取指定字符前面的所有字符方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 利用Python制作本地Excel的查詢與生成的程序問題

    利用Python制作本地Excel的查詢與生成的程序問題

    最近遇到這樣一個項目需求制作一個程序有一個簡單的查詢入口實現Excel的查詢與生成,今天教大家利用Python制作本地Excel的查詢與生成的程序,感興趣的朋友跟隨小編一起看看吧
    2022-06-06
  • 使用Python實現企業(yè)微信通知功能案例分析

    使用Python實現企業(yè)微信通知功能案例分析

    這篇文章主要介紹了使用Python實現企業(yè)微信通知功能,主要目的是通過企業(yè)微信應用給企業(yè)成員發(fā)消息,通過案例分析給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • python 通過xml獲取測試節(jié)點和屬性的實例

    python 通過xml獲取測試節(jié)點和屬性的實例

    下面小編就為大家分享一篇python 通過xml獲取測試節(jié)點和屬性的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • python多進程讀圖提取特征存npy

    python多進程讀圖提取特征存npy

    這篇文章主要為大家詳細介紹了python多進程讀圖提取特征存npy,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Linux下python與C++使用dlib實現人臉檢測

    Linux下python與C++使用dlib實現人臉檢測

    這篇文章主要為大家詳細介紹了Linux下python與C++使用dlib實現人臉檢測,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • python中zip和unzip數據的方法

    python中zip和unzip數據的方法

    這篇文章主要介紹了python中zip和unzip數據的方法,實例分析了Python中zlib模塊的相關使用技巧,需要的朋友可以參考下
    2015-05-05
  • python判斷正負數方式

    python判斷正負數方式

    這篇文章主要介紹了python判斷正負數方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • TensorFlow內存管理bfc算法實例

    TensorFlow內存管理bfc算法實例

    今天小編就為大家分享一篇TensorFlow內存管理bfc算法實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論