参考:
#######################################
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用于序列的每个元素,并把结果作为新的list返回
例:计算平方:
def f(x):
return x*x
map(f, [1,2,3,4,5])
map函数传入的第一个参数是f,即函数对象本身
可以使用一个循环计算平方:
L=[]
for n in range(1, 6):
L.append(f(n))
print L
只不过使用map更加一目了然
map()函数作为高阶函数,它把运算规则抽象了,因此,我们可以计算任意复杂的函数。
例如:
把list中所有数字转为字符串:
map(str, [1,2,3,4,5])把字符串转化为列表:
def char2num(s):
return {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5}[s]
map(char2num, '12345')
#########################################
reduce把一个函数作用于一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果为:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
例如:对一个序列求和:
def add(x, y):
return x+y
reduce(add, [1, 3, 5, 7, 9])
note:求和运算只用内置函数sum()更加方便
sum([1,3,5,7,9])
例如:把序列转换为整数:
def fn(x, y):
return x*10+y
reduce(fn, [1,3,5,7,9])
字符串str也是一个序列,所以配合map(),可以把str转换为int的函数:
def fn(x, y):
return x*10+y
def char2num(s):
return {'1':1, '3':3, '5':5, '7':7, '9':9}[s]
reduce(fn, map(char2num, '13579'))
统一为一个函数如下:
def str2int(s):
def fn(x, y):
return x*10+y
def char2num(s):
return {'1':1, '3':3, '5':5, '7':7, '9':9}[s]
return reduce(fn, map(char2num, s))
利用map函数,把用户输入的不规范的英文名字,变成首字母大写,其他小写的规范名字。
def func(s):
def standard(s):
if len(s) > 0 and isinstance(s, str):
if len(s) > 1:
return s[0].upper()+s[1:].lower()
elif len(s) == 1:
return s.upper()
def name(x):
return map(func, x)
编写一个prod()函数,可以接受一个list并利用reduce()求积
def prod(s):
def func(x, y):
return x*y
return reduce(func, s)