【问题标题】:How does lambda function work with reduce function in python?lambda函数如何与python中的reduce函数一起工作?
【发布时间】:2021-07-01 22:12:14
【问题描述】:

我正在尝试运行以下代码:

print(reduce(lambda x, y: x + y, [1,2,3,4,5]))

O/P -> 15

xy 是什么?这里的蓄能器是哪个?累加器是否总是必须是第一个参数(即x 这里) 没有初始化时会发生什么?选择的默认值是多少?

【问题讨论】:

  • 您是否从functools 导入了reduce

标签: python-3.x lambda reduce


【解决方案1】:

此代码的扩展形式,可能更容易理解

lst = [1, 2, 3, 4, 5]

x = 0  # Default value
for i in lst:
    y = i
    x = x + y
print(x)

或者,如果您考虑 lambda 函数:

lst = [1, 2, 3, 4, 5]
x = 0

def func(x,y):
    x = x + y
    return x

for i in lst:
    x = func(x, i)

print(x)

如您所见,x 是这里的累加器。如果您不将累加器指定为第一个参数,您将无法使用reduce 方法。

希望您的代码能够清楚地工作。

更新:正如@Wolf 指出的那样,我们可以为reduce 方法的args 指定一个初始值。将x 更新为 0,因为这是默认值。

【讨论】:

  • OP 使用的列表是[1, 2, 3, 4, 5]。但是正如您的回答所指出的那样,我对初始值的假设是不正确的。
  • 但是,切换到循环的想法可能是正确的。这似乎是通过将 reduce 函数从内置函数移动到 functools 间接给出的建议,请参阅 stackoverflow.com/q/181543/2932052 了解更多信息
【解决方案2】:

我认为functools.reduce(function, iterable[, initializer]) 的文档可读性很强。执行迭代,将操作从左到右应用于连续元素,并将结果累加到左操作数中。为了确定有问题的方面,创建上述代码的变体会有所帮助。

在下面的例子中,我们得到元素的总和;我们看到在工作中没有隐含的 1 作为“默认”值:

>>> print(reduce(lambda x, y: x + y, [2,3]))
5

如果 iterable 中没有剩余元素,则归约停止:

>>> print(reduce(lambda x, y: x + y, [1]))
1

如果根本没有元素,则减少失败

>>> print(reduce(lambda x, y: x + y, []))
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    print(reduce(lambda x, y: x + y, []))
TypeError: reduce() of empty sequence with no initial value

可选的initializer 值用于启动缩减(如果没有元素则立即停止):

>>> print(reduce(lambda x, y: x + y, [], 0))
0

所以x 确实是在进入可迭代对象之前使用可选的initializer 值初始化的累加器。 y 是可迭代的下一个值,如果没有元素(左),function 将被忽略。

这里再举一个例子来更好地理解xy的作用:

>>> print(reduce(lambda x, y: x - y, [1,2,3], 10))
4

在单步模式下,上面的缩减如下所示:

x = 10   # initializer
y = 1    # from iterable
x = x-y  # x==9
y = 2    # from iterable
x = x-y  # x==7
y = 3    # from iterable
x = x-y  # x==4
4        # result

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 2017-01-17
    • 1970-01-01
    • 2020-12-13
    • 2017-02-12
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多