我遇到了一个问题Python-
仅通过使用filter和lambda
删除列表中的重复项,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"""
无需使用任何外部变量。
此外,对于上述问题,没有什么“神奇”是允许的,尤其是set
功能,以及reduce
,map
…
基本上,不应调用其他函数,即使是内置函数。
从理论上讲,如果计算问题需要输入和输出而没有副作用,那么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
包装所有内容,仅使用列表作为参数。
我需要从String的ArrayList中删除重复项,而不考虑大小写。对于情商: 上面的不会提供任何帮助,因为它工作在将返回false的equals方法上。有没有其他方法可以做以下事情:
可能重复: PostgreSQL是否支持“重音不敏感”排序规则? 我试图删除重音,所以当我选择时,它会忽略它们。 例子: 它返回: 或者类似的东西。 我发现这些函数无法工作,我想这可能是因为我使用的是Struts 1。十、 请检查它们,告诉我哪里错了,或者我应该使用什么其他功能。 第一个函数 第二个功能 在NetBeans中运行文件时,这两个函数都会生成以下错误:
如果我不使用' a '和' b '变量,一切正常,否则,C返回: 错误:无法转换“main()::” 注意:初始化'void f(int, void(*)(int))'的参数2
请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得
我尝试只删除 1 个项目,或者当我使用打开的库存单击它时保留项目堆栈,但是,方法:,删除库存中的所有类似项目,如何只删除 1 个项目,或 1 ?