【问题标题】:lambda function explanationlambda函数解释
【发布时间】:2017-08-09 13:19:57
【问题描述】:

我在互联网上找到了 lambda 函数。我正在使用它并正确获取输出。但我需要知道解释,以便我可以根据我的要求更改功能。

此功能正在删除我拥有的列表中的所有重复数据。但我无法弄清楚 L 和 X 值是如何变化的。还有 l.append(x) 或 l 在这里做什么。在什么条件下会选择哪一个。请解释。让我们假设 Columns["Hello"] 有 [1,1,2,3,4,5,6,6,7,8,9,9,10,0]

repeating_data = reduce(lambda l, x: 
                             l.append(x) or l if x not in l else l,
                             columns['Hello'], [])

谢谢 洛基

【问题讨论】:

  • 这是非常糟糕的代码。我会完全放弃它。功能构造内部的突变状态是禁忌。它也恰好是非常低效的,具有多项式运行时复杂性。
  • 您是否正在使用pandas 数据框?

标签: python function lambda reduce


【解决方案1】:

我同意,它通过复杂的 lambda 函数使代码不可读。

lambda函数大致等价于下面(带cmets),

def ext_function(columns['Hello']):
    #Empty list to accumulate values
    l = []
    #Iterate through column
    for x in columns['Hello']:        
        #if col_value not in l , append
        if x not in l:
            l.append(x)
    return l

而reduce 函数正在依次应用lambda 函数来输入列表列['Hello'] 和累加器[]。

老实说,如果您只是想消除重复,只需一行即可实现。

l = list(set(Columns["Hello"]))

希望这会有所帮助。

【讨论】:

  • 谢谢大家的解释
  • @HyderTom ,如果我的回答是您正在寻找的,请考虑接受答案,因为这将有助于这个问题不会被悬而未决。
  • 我在哪里做呢?
  • 我的答案旁边应该有一个灰色的复选标记。选择它,它会变成绿色。您可以在此处参考更多详细信息:meta.stackexchange.com/questions/5234/….
【解决方案2】:

我会使用set 在列表中查找唯一项目。

unique_items = list(set(columns["Hello"]))

要解释那段代码中发生了什么,诀窍在于reduce,而不是lambda。在高层次上,lambda 进行唯一性检查,reduce 将列表中的项目传递给 lambda 函数。

为了解释该代码的 lambda 部分,lambda 创建了一个函数对象,在这种情况下,它接受 2 个输入,l 和 x 并将它们传递给表达式,@ 987654325@ 在 l.append(x) 或 l 周围添加了大括号,以便于阅读,因为其余的只是 if else 语句。

如前所述,要真正了解它的工作原理,诀窍在于 reduce,链接的 python 文档很好地解释了这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2013-05-30
    相关资源
    最近更新 更多