1)map()函数接收两个参数,一个是函数,一个是Iterable.map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
把f(x)作用在list的每一个元素并把结果生成一个新的list
def f(x):
return x * x
r = map(f, [1, 2, 3])
print(list(r)) #结果打印[1,4,9]
map()传入的第一个参数是f,函数本身;结果r是一个Iterator(惰性序列),通过list()函数计算整个序列,并返回一个list
#循环打印结果
L = []
for n in [1,2,3]:
L.append(f(n))
print(L)
map()作为高阶函数,把运算规则抽象了,可以计算任意复杂的函数,如:把list所有数字转换为str
x = list(map(str,[1,2,3]))
print(x)
2)reduce():把一个函数作用在一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3])=f(f(x1,x2),x3)
def add(x, y):
return x + y
y = reduce(add, [1, 2, 3, 4])
把序列[1,2,3,4]变为[1234]
def fn(x, y):
return x * 10 + y
y = reduce(fn, [1, 2, 3, 4])
3)map与reduce结合,将str序列转换为int
def fn(x, y):
return x * 10 + y
def char2num(s):
digits = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return digits[s]
print(reduce(fn,map(char2num,'23445')))
网友评论