栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

仅使用Lambda函数删除重复项

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

仅使用Lambda函数删除重复项

从理论上讲,如果计算问题需要输入和输出而没有副作用,那么lambda演算可能可以解决它(更一般地说,lambda演算是图灵完备的,请参阅Wikipedia)。

现在,对于实现,以下

lambda
函数接受一个list参数,并返回一个列表,其中已删除所有重复项:

lambda l: (lambda u, a: u(u, a)) ((lambda f, x: x if len(x) <= 0 else (f(f, x[1:]) if x[0] in x[1:] else ([x[0]] + f(f, x[1:])))), l)

这是一个未包装的版本:

lambda l:    (lambda u, a: u(u, a))    (        (lambda f, x: x if len(x) <= 0  else  (      f(f, x[1:]) if x[0] in x[1:]       else ([x[0]] + f(f, x[1:]))  )         ),         l    )

该函数包含

lambda
以下递归函数的版本:

def f(l):    if len(l) <= 0:        return l    elif l[0] in l[1:]:        return f(l[1:])    else:        return ([l[0]] + f(l[1:]))

为了模拟递归调用,等效项

lambda
需要一个附加函数作为参数,该函数本身就是:

lambda f, x: x if len(x) <= 0    else    (        f(f, x[1:]) if x[0] in x[1:]         else ([x[0]] + f(f, x[1:]))    )

然后,另一个

lambda
调用此先前的函数,将自身作为参数传递(除列表外):

lambda u, a: u(u, a)

最后,外部

lambda
包装所有内容,仅使用列表作为参数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号