Python 仅使用lambda函数删除重复项

Python 仅使用lambda函数删除重复项,python,lambda,Python,Lambda,我遇到了一个问题,OP询问如何使用独占的filter和lambda函数从Python列表中删除重复元素 这让我想知道,从理论上讲,是否可以只使用lambda函数从Python列表中删除重复项 如果是的话,我们怎么做 在这种情况下,“删除重复项”意味着“在原始列表中保留每个元素的恰好一次出现”,因此[1,2,1,3,1,4]应变为[1,2,3,4] 此外,目标是只编写一个lambda,因此代码将是一个类似以下的单行程序: lambda l: """do something that returns

我遇到了一个问题,OP询问如何使用独占的
filter
lambda
函数从Python列表中删除重复元素

这让我想知道,从理论上讲,是否可以只使用
lambda
函数从Python列表中删除重复项

如果是的话,我们怎么做

在这种情况下,“删除重复项”意味着“在原始列表中保留每个元素的恰好一次出现”,因此
[1,2,1,3,1,4]
应变为
[1,2,3,4]

此外,目标是只编写一个
lambda
,因此代码将是一个类似以下的单行程序:

lambda l: """do something that returns l without duplicates"""
不得使用外部变量

此外,对于上述问题,不允许任何“花哨”的东西,尤其是
设置
功能,以及
减少
映射


基本上,不应该调用其他函数,即使是内置函数。

从理论角度来看,如果计算问题需要输入和输出而没有副作用,lambda演算可能会解决它(更一般地说,lambda演算是图灵完全的,cf)

现在,对于实现,下面的
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
采用一个附加函数作为参数,该函数本身就是:

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演算可能会解决它(更一般地说,lambda演算是图灵完全的,cf)

现在,对于实现,下面的
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
采用一个附加函数作为参数,该函数本身就是:

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只起作用,没有临时占位符/容器?@wwii编辑了我的问题;是的,代码必须只包含在一个lambda函数中,因此不允许使用其他容器。有时这有点棘手,但通常您可以找到一种方法来编写函数的lambda版本,而不管它有多混乱或不可读。@wwii检查我的答案,看看它有多混乱:)
lambda:list(set(a))
?仅lambda函数,没有临时占位符/容器?@wwii编辑了我的问题;是的,代码必须只包含在一个lambda函数中,因此不允许使用其他容器。有时这有点棘手,但通常您可以找到一种方法来编写函数的lambda版本,而不管它有多混乱或不可读。@wwii检查我的答案,看看它有多混乱:)
lambda:list(set(a))
?整洁。出于某种原因,我想到了;-)@snakecharmerb确实如此,除了在本例中,C/Fortran是Python,而公共Lisp是Python:)整洁。出于某种原因,我想到了;-)@snakecharmerb确实如此,除了在本例中,C/Fortran是Python,而公共Lisp是Python:)
lambda u, a: u(u, a)