Python中的map和reduce函数

mapreduce 是Python中用于对集合进行处理的内建函数。

map函数:

map 函数接受一个函数和一个可迭代对象作为参数,并将该函数应用于可迭代对象中的每个元素,返回一个新的可迭代对象(通常是一个迭代器)。

基本语法:

map(function, iterable)
  • function:要应用于每个元素的函数。
  • iterable:一个可迭代对象,如列表、元组等。

示例:

def square(x):
    return x ** 2

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
# squared_numbers 是一个迭代器,包含了 [1, 4, 9, 16, 25]

在上述示例中,mapsquare 函数应用于 numbers 列表中的每个元素,返回了一个包含了每个元素平方值的迭代器。

reduce函数:

reduce 函数接受一个函数和一个可迭代对象作为参数,将该函数应用于可迭代对象中的元素,从左到右依次累积计算,最终返回一个单一的值。

在Python 3中,reduce 函数被移到了 functools 模块中。

基本语法:

functools.reduce(function, iterable)
  • function:用于计算的函数,它必须接受两个参数。
  • iterable:一个可迭代对象,如列表、元组等。

示例:

from functools import reduce

def add(x, y):
    return x + y

numbers = [1, 2, 3, 4, 5]
result = reduce(add, numbers)
# result 等于 15 (1 + 2 + 3 + 4 + 5)

在上述示例中,reduceadd 函数应用于 numbers 列表中的所有元素,从左到右依次相加,最终得到结果 15。

需要注意的是,在Python 3中,reduce 函数被移到了 functools 模块中,因此需要从该模块中导入。

手写str2int()函数

>>> from functools import reduce
>>> 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]
...
>>> reduce(fn, map(char2num, '13579'))
13579

整理成一个函数

from functools import reduce

DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

def str2int(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(s):
        return DIGITS[s]
    return reduce(fn, map(char2num, s))

使用lambda函数进行简化

from functools import reduce

DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

def char2num(s):
    return DIGITS[s]

def str2int(s):
    return reduce(lambda x, y: x * 10 + y, map(char2num, s))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王摇摆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值