如果 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 ,这似乎是初始列表。你确定要这样做吗?
L 是 list
还是 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的主要内容,如果未能解决你的问题,请参考以下文章