map函式和reduce函式

2022-06-10 22:15:17 字數 2332 閱讀 1726

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

map()傳入的第乙個引數是f,即函式物件本身。由於結果r是乙個iterator,iterator是惰性序列,

因此通過list()函式讓它把整個序列都計算出來並返回乙個list。

reduce把乙個函式作用在乙個序列[x1, x2, x3, ...]上,這個函式必須接收兩個引數,

reduce把結果繼續和序列的下乙個元素做累積計算,其效果就是

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

age:利用map和reduce編寫乙個str2float函式,把字串'123.456'轉換成浮點數123.456

def str2float(s):

def fn(x,y):

return x*10+y

n=s.index('.')

s1=list(map(int,[x for x in s[:n]]))

s2=list(map(int,[x for x in s[n+1:]]))

return reduce(fn,s1) + reduce(fn,s2)/10**len(s2)

print('\'123.4567\'=',str2float('123.4567')) 

python內建的filter()函式用於過濾序列。

和map()類似,filter()也接收乙個函式和乙個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,

然後根據返回值是true還是false決定保留還是丟棄該元素。filter()函式返回的是乙個iterator,也就是乙個惰性序列。

用filter求素數:

計算素數的乙個方法是埃氏篩法,它的演算法理解起來非常簡單:

首先,列出從2開始的所有自然數,構造乙個序列:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取序列的第乙個數2,它一定是素數,然後用2把序列的2的倍數篩掉:

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第乙個數3,它一定是素數,然後用3把序列的3的倍數篩掉:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第乙個數5,然後用5把序列的5的倍數篩掉:

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

不斷篩下去,就可以得到所有的素數。

先構造乙個從3開始的奇數序列:

def _odd_iter():

n = 1

while true:

n = n + 2

yield n

然後定義乙個篩選函式:

def _not_divisible(n):

return lambda x: x % n > 0

定義乙個生成器,不斷返回下乙個素數:

def primes():

yield 2

it = _odd_iter() # 初始序列

while true:

n = next(it) # 返回序列的第乙個數

yield n

it = filter(_not_divisible(n), it) # 構造新序列

由於primes()也是乙個無限序列,所以呼叫時需要設定乙個退出迴圈的條件:

# 列印1000以內的素數:

for n in primes():

if n < 1000:

print(n)

else:

break

利用filter求回數:

def is_palindrome(n):

return str(n)==str(n)[::-1]

output=filter(is_palindrome,range(1,1000))  

print(list(output))

講python_mro比較好的:

講mixin比較好的:

學習筆記/

map 函式和reduce 函式

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

map 函式和 reduce 函式

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

map和reduce函式簡介

map函式會根據提供的函式對指定序列做對映。其語法為 map function,iterable 也就是對iterable中的每乙個元素進行function的運算,並返回乙個迭代器。我們想要實現這樣乙個目的 判斷乙個數是奇數還是偶數,並返回乙個列表,列表中包含判斷結果。首先我們定義乙個函式用於判斷並...