python 内置函数map、reduce的使用

本文详细解释了Python中的map()和reduce()函数的使用方法,包括如何使用它们进行序列操作,如计算平方、转换数据类型、求和等。通过实例演示,帮助读者理解这两个函数的功能和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00141861202544241651579c69d4399a9aa135afef28c44000


#######################################


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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值