【发布时间】:2018-04-29 02:27:54
【问题描述】:
我目前正在尝试在 Python 中实现 fold/reduce,因为我不喜欢 functools 的版本。这自然涉及实现类似 Lisp CDR 函数的东西,因为 Python 似乎没有类似的东西。这是我想尝试的:
def tail(lat):
# all elements of list except first
acc = []
for i in range(1,len(lat)):
acc = acc + [lat[i]]
这是实现此功能的有效方式吗?我是否缺少某种内置功能?提前致谢!
【问题讨论】:
-
你为什么不喜欢
functools的版本?你想让它被柯里化,所以reduce(f)返回一个函数,它接受一个可迭代并在它上面减少f?或者是因为它是一个带有可选参数的函数,而不是两个可以交替传递给其他高阶函数的单独函数?还是一个名为“Reduce-O”的超级反派杀死了你的父亲,所以你只能使用名为fold的函数? (其中一些比其他更合理,但这不是重点;知道您想要更改的内容可能会更容易提出建议。) -
我主要不想使用
functools.reduce,因为它需要使用 lambda(或者我错了?)而且 python lambdas 不是很灵活。我想要一个可以使用任何二进制函数的版本,不管它有多复杂。我目前正在尝试实现高斯消除,这基本上是所有列表操作,所以我认为某种折叠会使它更容易。 -
Python 中没有“lambda”之类的东西。 lambda 不是一种不同的函数,它只是定义唯一一种函数的不同方式。和 Python 中几乎所有其他东西一样,reduce 甚至不需要函数;它将采用绑定方法、部分、带有自定义调用方法的您自己的类的实例等。因此,您白费了很多麻烦。
-
谢谢!以后我会牢记这一点。
标签: python higher-order-functions