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...