python中的map,feilter,和reduce函數

python中的map,feilter,和reduce函數


map()

map()的原型是map(function, iterable, …)

  • 參數 function: 傳的是一個函數名,可以是python內置的,也可以是自定義的。 就像上面的匿名函數lambda

  • 參數 iterable: 傳的是一個可以迭代的對象,例如列表,元組,字符串這樣的。

  • 返回值是一個map對象,其實質就是一個迭代器

這個函數的意思就是將function應用於iterable的每一個元素,結果以列表的形式返回(其實是迭代器)。注意到沒有,iterable後面還有省略號,意思就是可以傳很多個iterable,如果有額外的iterable參數,並行的從這些參數中取元素,並調用function。如果一個iterable參數比另外的iterable參數要短,將長iterable剩下的元素扔掉。

例子:將列表中的int型元素轉換成字符串型


a=[1,2,3,4,5]

la=map(str,a)

print(la)
print(list(la)) #使用list方法將迭代器轉化成列表

輸出:

<map object at 0x000002C09F758278>
['1', '2', '3', '4', '5']

例子:將兩個等長列表合併

"""
如果兩個列表不等長,map會以最短的列表爲準,將長列表剩下的元素扔掉,如果想以長列表爲準的話
"""
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]

res = map(lambda x, y: x + y, a, b)

print(list(res))

輸出:
    
[2, 4, 6, 8, 10]


如果兩個列表不等長,map會以最短的列表爲準,將長列表剩下的元素扔掉,
如果不想丟棄長列表剩下的元素,想以長列表爲準的話,請點擊以下鏈接

https://blog.csdn.net/weixin_43250623/article/details/93409418


reduce()

reduce函數接收兩個參數,一個是函數,一個是Iterable

把一個函數作用在一個序列[x1, x2, x3, ...]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素做累積計算,其效果就是:

from functools import reduce
# 從某個版本開始reduce不再作爲內置函數存在,而是放在了functools模塊中


def f1(x, y):
    return x + y


a = [1, 2, 3, 4, 5]

res = reduce(f1, a)
print(res)

輸出:
#  15

如果要把序列[1, 3, 5, 7, 9]變換成整數13579reduce就可以派上用場:

def fn(x, y):
    return x * 10 + y


res = reduce(fn, [1, 3, 5, 7, 9])
print(res)

輸出:
#  13579

filter()

filter函數用於過濾序列

filter()函數包含2個參數,一個是過濾函數,另一個是過濾序列

返回值是一個可迭代對象

filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素。

下面用一個例子:

刪除1-100中素數

L = range(1, 101)


def isprimer(n):
    flag = 1
    for i in range(2, n):
        if n % i == 0:
            flag = 0
    if flag == 0:
        return n


res = filter(isprimer, L)

print(res)  # 輸出來是一個filter對象,其實質是一個迭代器
print(list(res))

輸出:

<filter object at 0x0000020B7AC583C8>

[4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100]

更詳細講解移步https://www.liaoxuefeng.com/wiki/1016959663602400

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章