如果 x 在集合 L 中,如何使用 lambda 函数创建返回 true 的函数 L

Posted

技术标签:

【中文标题】如果 x 在集合 L 中,如何使用 lambda 函数创建返回 true 的函数 L【英文标题】:How to make a function L with lambda that return true if if x is in the set L 【发布时间】:2016-08-22 23:50:50 【问题描述】:

我正在尝试使用lambda 编写一个函数并将其分配给一个变量,例如 L。如果传递的参数x 包含在集合L 中,它应该返回true

L = (1, 2, 3), (4, 5, 6) # 例子 x = (2, 3, 5) #示例

L = lambda x : list.__contains__(L, x)

似乎不起作用。 这个想法是我想同时使用 L 作为变量和函数。

我哪里错了?实现这一目标的最佳方法是什么?

【问题讨论】:

也发布您的列表或元组数据 你想创建一个引用他自己的函数 L 吗?还是 L 已经存在并且您正在尝试覆盖它? 为什么不lambda_func = lambda x: x in mylist?无论如何,也许您正在传递字符串与整数或类似的东西?给出你的 L 和 x 值。同样@Scantlight 所说,您正在重新分配 L ,这似乎是初始列表。你确定要这样做吗? Llist 还是 function 是的。起初 L 是一个集合。我想创建一个也称为 L 的函数,如果 x 在 L 中,则返回 true 。 【参考方案1】:

使用in:

func = lambda elem, cont: elem in cont

li = [1, 2, 3]
print(func(1, li))
>> True
print(func(4, li))
>> False

但是对于这种用法,为了简单起见,可以使用普通的def 语法。

【讨论】:

谢谢,如果我希望 func 与 cont 同名,我该怎么办? 在这种情况下你可以,但我看不出你有任何理由想要这样做。【参考方案2】:

来自 PEP-8: “始终使用 def 语句而不是直接将 lambda 表达式绑定到标识符的赋值语句。”

为什么不使用:

def check(obj, iterable):
    return True if obj in iterable else False

?

【讨论】:

【参考方案3】:

当你定义一个lambda函数时,它会赋值给L变量不被执行,所以L的原始内容在使用之前会丢失,并且会引用一个@ 987654324@,但不是set

如果你愿意尝试:

L =  (1, 2, 3), (4, 5, 6)
L = lambda x: x in L
L((1, 2, 3))

你会得到一个错误:

TypeError: argument of type 'function' is not iterable

如您所见,在使用L 时,它将是type function 而不再是set。所以这是一种错误的方法,除非你想使用多个上下文。

要以正确的方式执行此操作,您应该有一个变量链接到您的数据集,另一个变量链接到您的函数 (lambda)。

L = (1, 2, 3), (4, 5, 6)
F = lambda x: x in L
if F((1, 2, 3)):
    print("was found in L")

【讨论】:

以上是关于如果 x 在集合 L 中,如何使用 lambda 函数创建返回 true 的函数 L的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 表达式中的多个 Where 子句

如何使用 lambda 在对象中打印集合列表

python第l六天,lambda表达式学习,涉及filter及Map。

直接在数据帧上触发数据帧 lambda

Java中的集合类Lambda鲁棒性简述

Python lambda