廖雪峰Python教程之mapreduce

2021-09-01 12:03:41 字數 1725 閱讀 1113

1.map()函式

map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。

def f(x):

return x*x

r = map(f, [1,2,3,4,5])

list(r)

out:

[1, 4, 9, 16, 25]

2.reduce()函式

如果要把序列[1, 2, 3, 4, 5, 6]變換成整數123456,reduce就可以派上用場:

from functools import reduce

def fn(x, y):

return x*10+y

reduce(fn, [1,2,3,4,5,6])

out:

123456

作業1

利用map()函式,把使用者輸入的不規範的英文名字,變為首字母大寫,其他小寫的規範名字。輸入:[『adam』, 『lisa』, 『bart』],輸出:[『adam』, 『lisa』, 『bart』]:

l1 = ['adam', 'lisa', 'bart']

def normalize(name):

name = name[0].upper() + name[1:].lower()

return name

l2 = list(map(normalize , l1))

l2

out:

['adam', 'lisa', 'bart']

作業2

python提供的sum()函式可以接受乙個list並求和,請編寫乙個prod()函式,可以接受乙個list並利用reduce()求積:

from functools import reduce

l = [1,2,3,4,5,6,7,8,9]

def sum(x,y):

return x+y

sum = reduce(sum, l)

sum

out:

45

作業3:

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

from functools import reduce

def str2float(s):

def fn(x, y):

return x * 10 + y

def char2num(s):

return [s]

return reduce(fn, map(char2num, s.replace(".","")))

s="1234.567"

if s.find(".")!=-1:

print('str2float(\'%s\') ='%s, str2float(s)/pow(10,(len(s)-s.find(".")-1)))

else:

print('str2float(\'%s\') ='%s, str2float(s))

out:

str2float('1234.567') = 1234.567

廖雪峰Python教程之filter

filter 過濾器 python內建的filter 函式用於過濾序列。和map 類似,filter 也接收乙個函式和乙個序列。和map 不同的是,filter 把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。回數是指從左向右讀和從右向左讀都是一樣的數,...

廖雪峰Python教程之sorted

sorted 排序函式 sorted 也是乙個高階函式。用sorted 排序的關鍵在於實現乙個對映函式。作業1 假設我們用一組tuple表示學生名字和成績 l bob 75 adam 92 bart 66 lisa 88 方法1 l bob 75 adam 92 bart 66 lisa 88 de...

廖雪峰python教程 Python簡介

python是著名的 龜叔 guido van rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的乙個程式語言。現在,全世界差不多有600多種程式語言,但流行的程式語言也就那麼20來種。如果你聽說過tiobe排行榜,你就能知道程式語言的大致流行程度。這是最近10年最常用的10種程式語言...