为了账号安全,请及时绑定邮箱和手机立即绑定

使用reduce()的有用代码?

使用reduce()的有用代码?

拉丁的传说 2021-03-14 20:22:36
这里有没有人有任何有用的代码在python中使用reduce()函数?除了示例中常见的+和*以外,还有其他代码吗?
查看完整描述

4 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

除+和*之外,我为它找到的其他用途是和和或或,但现在我们有anyall来替换这些情况。

foldlfoldr确实在Scheme中大放异彩...

这是一些可爱的用法:

整理清单

目标:[[1, 2, 3], [4, 5], [6, 7, 8]]变成[1, 2, 3, 4, 5, 6, 7, 8]

reduce(list.__add__, [[1, 2, 3], [4, 5], [6, 7, 8]], [])

数字列表到一个数字

目标:[1, 2, 3, 4, 5, 6, 7, 8]变成12345678

丑陋,缓慢的方式:

int("".join(map(str, [1,2,3,4,5,6,7,8])))

漂亮的reduce方式:

reduce(lambda a,d: 10*a+d, [1,2,3,4,5,6,7,8], 0)


查看完整回答
反对 回复 2021-03-22
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

reduce()可用于查找3个或更多数字的最小公倍数:


#!/usr/bin/env python

from fractions import gcd

from functools import reduce


def lcm(*args):

    return reduce(lambda a,b: a * b // gcd(a, b), args)

例子:


>>> lcm(100, 23, 98)

112700

>>> lcm(*range(1, 20))

232792560


查看完整回答
反对 回复 2021-03-22
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

reduce()可以用来解析点名(eval()太不安全了,无法使用):


>>> import __main__

>>> reduce(getattr, "os.path.abspath".split('.'), __main__)

<function abspath at 0x009AB530>


查看完整回答
反对 回复 2021-03-22
?
隔江千里

TA贡献1906条经验 获得超10个赞

找到N个给定列表的交集:


input_list = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7]]


result = reduce(set.intersection, map(set, input_list))

返回:


result = set([3, 4, 5])


查看完整回答
反对 回复 2021-03-22
  • 4 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信