【问题标题】:How to make a function L with lambda that return true if if x is in the set L如果 x 在集合 L 中,如何使用 lambda 函数创建返回 true 的函数 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 。

标签: python lambda contains


【解决方案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")
    

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2011-06-06
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多