map和reduce函式簡介

2021-10-04 19:30:45 字數 4066 閱讀 9650

map函式會根據提供的函式對指定序列做對映。其語法為:map(function, iterable)。也就是對iterable中的每乙個元素進行function的運算,並返回乙個迭代器。

我們想要實現這樣乙個目的:判斷乙個數是奇數還是偶數,並返回乙個列表,列表中包含判斷結果。

首先我們定義乙個函式用於判斷並返回結果,接下來我們取1-5這5個數代入。

def

f1(n)

:if n%2==

0:return f' is even.'

else

:return f' is odd.'

print

(map

(f1,

range(1

,6))

)

結果是:

<

mapobject at 0x00000178550186a0

>

說明,我們使用map函式得到的是乙個map物件,沒辦法得到其中的內容,我們檢視它的type。

print

(type

(map

(f1,

range(1

,6))

))

結果是:

<

class

'map'

>

因此我們將結果放在乙個列表中,列印出來。

print

(list

(map

(f1,

range(1

,6))

))

結果是:

[

'1 is odd.'

,'2 is even.'

,'3 is odd.'

,'4 is even.'

,'5 is odd.'

]

所以,為了實現以上目的,我們首先定義了f1,之後使用一行**,就可以得到目標list了。

如果我們沒有使用map函式,該如何實現呢?可以考慮使用for迴圈進行遍歷。

list1=

for num in

range(1

,6):

if num%2==

0:)else

)print

(list1)

#同樣得到結果:

['1 is odd.'

,'2 is even.'

,'3 is odd.'

,'4 is even.'

,'5 is odd.'

]

上乙個例子中我們對列表進行map函式的應用,這乙個例子我們將對str物件進行map函式的使用。我們想提取出列表中的人名,並且將不規範的人名變成首字母大寫,其餘字母小寫。

初始列表如下:

list2=

['becky:2333'

,'lisa:1234'

,'tomy:2580'

]

我們定義f2函式,觀察初始列表,我們想要獲取人名,則可以先將每個元素按照「:」分割,然後取第0個元素。我們想要將人名規範化,可以使用str中的capitalize函式,用於使首字母大寫、其餘字母小寫。

def

f2(n)

:return

str.capitalize(n.split(

':')[0

])print

(map

(f2,list2)

)print

(type

(map

(f2,list2)

))

結果是:

<

mapobject at 0x00000178550188d0

>

<

class

'map'

>

我們得到的是乙個迭代器,為了拿到每乙個內容,我們使用for進行遍歷。

for name in

map(f2,list2)

:print

(name)

結果是:

becky

lisa

tomy

for i in list2:

print

(str

.capitalize(i.split(

':')[0

]))同樣得到結果:

becky

lisa

tomy

可以看出,map函式得到的是乙個迭代器(乙個物件),想要獲取迭代器中的每乙個內容,可以使用for迴圈遍歷;此時不使用map函式也能實現,直接使用for迴圈,得到的是多個單個元素的內容(多個物件)。

reduce函式是對引數序列中的元素進行累積。對於乙個引數序列,先對第1、2個元素進行操作,得到的結果再與第3個元素進行操作,最終得到乙個結果。其語法是:reduce(function, iterable[, initializer]),其中,function是函式,它有兩個引數,iterable是可迭代物件,intializer是初始引數,可以省略。

我們呼叫reduce函式需要從functools庫中匯入

from functools import

reduce

我們把1-5這五個數變成乙個數:『12345』.

def

f3(x,y)

:return x*

10+y

print

(reduce

(f3,

range(1

,6))

)

結果是:

12345
此處我們來看一下實現過程。

如果我們加入乙個初始引數,則

print

(reduce

(f3,

range(1

,6),

30))

結果如下:

3012345
實現過程變成了:

此時的初始引數30,會作為第乙個x進入function。

我們實現乙個str的逆向輸出

def

f4(x,y)

:return y+x

print

(reduce

(f4,

'becky'

))

結果為:

ykceb
如果我們定義乙個初始引數

def

f5(x,y)

:return y+x

print

(reduce

(f5,

'becky'

,'lisa'

))

結果變為:

ykceblisa
其實現過程為:

最後輸出就是**『ykceblisa』**

以上就是map和reduce函式的簡要介紹,我們利用這兩個函式可以輕鬆實現遍歷和迭代。趕快用起來吧~

map 函式和reduce 函式

map 函式 也稱對映物件函式,接受兩個引數,第乙個是函式,第二個是序列。map 將傳入的函式依次作用到序列的每個元素並把結果作為list返回。map返回的結果是乙個可迭代的map物件,可以使用 next 獲取值,也可使用for迴圈迭代獲取或者直接轉換為list獲取更加暴力。def demo x r...

map 函式和 reduce 函式

從引數方面來講 map 包含兩個引數,第乙個引數是乙個函式,第二個是序列 列表 或元組 其中,函式 即 map 的第乙個引數位置的函式 可以接收乙個或多個引數。reduce 第乙個引數是函式,第二個是序列 列表或元組 但是,其函式必須接收兩個引數。從對傳進去的數值作用來講 map 是將傳入的函式依次...

map函式和reduce函式

map 函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。def f x return x x r map f,1,2,3,4,5,6,7,8,9 list r 1,4,9,16,25,36,49,64,81 ma...