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的運算,並返回乙個迭代器。我們想要實現這樣乙個目的 判斷乙個數是奇數還是偶數,並返回乙個列表,列表中包含判斷結果。首先我們定義乙個函式用於判斷並...