Is it possible to have multiple statements in a python lambda expression?

后端 未结 18 1953
感情败类
感情败类 2020-12-12 21:33

I am a python newbie trying to achieve the following:

I have a list of lists:

lst = [[567,345,234],[253,465,756, 2345],[333,777,111, 555]]

18条回答
  •  遥遥无期
    2020-12-12 22:08

    Let me present to you a glorious but terrifying hack:

    import types
    
    def _obj():
      return lambda: None
    
    def LET(bindings, body, env=None):
      '''Introduce local bindings.
      ex: LET(('a', 1,
               'b', 2),
              lambda o: [o.a, o.b])
      gives: [1, 2]
    
      Bindings down the chain can depend on
      the ones above them through a lambda.
      ex: LET(('a', 1,
               'b', lambda o: o.a + 1),
              lambda o: o.b)
      gives: 2
      '''
      if len(bindings) == 0:
        return body(env)
    
      env = env or _obj()
      k, v = bindings[:2]
      if isinstance(v, types.FunctionType):
        v = v(env)
    
      setattr(env, k, v)
      return LET(bindings[2:], body, env)
    

    You can now use this LET form as such:

    map(lambda x: LET(('_', x.sort()),
                      lambda _: x[1]),
        lst)
    

    which gives: [345, 465, 333]

提交回复
热议问题