【问题标题】:reduce function with lambda用 lambda 减少函数
【发布时间】:2020-05-13 20:47:29
【问题描述】:

我正在尝试了解 reduce 函数如何与 lambda 函数一起工作

#argument digits can be "23" or "45"
def letterCombinations(self, digits):
        if '' == digits: return []
        kvmaps = {
            '2': 'abc',
            '3': 'def',
            '4': 'ghi',
            '5': 'jkl',
            '6': 'mno',
            '7': 'pqrs',
            '8': 'tuv',
            '9': 'wxyz'
        }
        return reduce(lambda acc, digit: [x + y for x in acc for y in kvmaps[digit]], digits, [''])

但是,当我遇到 return 声明时,我完全被难住了 有人可以帮我分解退货声明以了解它应该做什么

我已经浏览了以下链接: how lambda works with reduce

Q1 acc(累加器)的第一个值是多少? Q2是我的理解,迭代器只会被lambda的第二个参数使用,对吗? Q3:accumulator(acc) 和第二个参数的行为在初始化器存在与否的情况下是否不同?

【问题讨论】:

  • 这里的问题真的是 lambda 吗?即如果给reduce 一个命名函数,你能理解代码吗?
  • 您链接到的问题的答案很好地解释了这一点。看完这个答案你到底有什么不明白的?
  • @DeepSpace,问题已更新,

标签: python-3.x lambda reduce


【解决方案1】:

您的所有问题都在docs 中得到解答。

reduce(lambda acc, digit: [x + y for x in acc for y in kvmaps[digit]], digits, [''])

acc(累加器)的第一个值是什么?

在这种情况下:[''],一个带有空字符串的列表。

我的理解是,迭代器只会被 lambda 的第二个参数使用,对吗?

第二个参数(在本例中为digit)是来自提供的迭代器的单个元素,在本例中为digits

accumulator(acc) 的行为和第二个参数在初始化器存在与否的情况下是否不同?

没有。初始化器被插入到可迭代的第一个元素之前。如果 iterable 为空,则将返回该初始化程序。

【讨论】:

    【解决方案2】:

    有趣的例子!让我们删除 self,添加 import,并修改 lambda 以更好地理解:

    from functools import reduce
    def letterCombinations(digits):
            if '' == digits: return []
            kvmaps = {
                '2': 'abc',
                '3': 'def',
                '4': 'ghi',
                '5': 'jkl',
                '6': 'mno',
                '7': 'pqrs',
                '8': 'tuv',
                '9': 'wxyz'
            }
            return reduce(lambda acc, digit: 
                          [x + y for x in acc for y in kvmaps[digit]],
                          digits, ['GLOUGLOU'])
    

    所以现在如果我用

    测试我们的功能
    letterCombinations('4')
    

    它会回答

    >>>['GLOUGLOUg', 'GLOUGLOUh', 'GLOUGLOUi']
    

    所以你看到它拆分了 kvmaps['4'] 给出的字母 g,h,i,并将它们添加到 'GLOUGLOU'。

    如果我替换

    ['GLOUGLOU']
    

    通过

    ['GLOUGLOU', 'DRINGDRING']
    

    你会有

    >>>['GLOUGLOUg',
     'GLOUGLOUh',
     'GLOUGLOUi',
     'DRINGDRINGg',
     'DRINGDRINGh',
     'DRINGDRINGi']
    

    从那里,您可以看到 reduce() 在您的情况下如何使用数字连接。

    希望对你有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2018-07-29
      • 2015-10-11
      • 1970-01-01
      • 2016-01-26
      • 2021-11-06
      相关资源
      最近更新 更多