【问题标题】:Python loop for inside lambda内部 lambda 的 Python 循环
【发布时间】:2014-07-16 18:23:43
【问题描述】:

在我的代码中,我需要尽可能简化我的代码行。 编辑:我认为我不够清楚 - 它需要是一行代码。 我需要在 lambda 表达式中放置一个 for 循环,如下所示:

x = lambda x: (for i in x : print i)

我只是不知道如何实现它。 谢谢!

【问题讨论】:

  • 只为这种情况做一个函数!
  • 我知道这是一个选项,正如我所说我需要简化 - 使其成为一行代码。
  • 为什么要一行代码?
  • simplify != 代码高尔夫
  • 我同意你的观点,但那是我的任务。不管我们怎么想,这就是我现在的目标。

标签: python for-loop lambda


【解决方案1】:

我们可以在 for 循环中使用 lambda 函数 按照下面的代码

list1 = [1,2,3,4,5]

list2 = []

for i in list1:

    f = lambda i: i /2

    list2.append(f(i))
print(list2)

【讨论】:

    【解决方案2】:

    以防万一,如果有人正在寻找类似的问题......

    这里给出的大多数解决方案都是一行,并且非常易读和简单。只是想再添加一个不需要使用 lambda 的内容(我假设您尝试使用 lambda 只是为了使其成为单行代码)。 相反,您可以使用简单的列表推导式。

    [print(i) for i in x]
    

    顺便说一句,返回值将是 None 上的列表。

    【讨论】:

      【解决方案3】:

      如果你像我一样只想在 lambda 中打印一个序列,而不获取返回值(无列表)。

      x = range(3)
      from __future__ import print_function           # if not python 3
      pra = lambda seq=x: map(print,seq) and None     # pra for 'print all'
      pra()
      pra('abc')
      

      【讨论】:

        【解决方案4】:

        anon 和 chepner 的答案是正确的。 Python 3.x 有一个 print 函数,如果你想将 print 嵌入到一个函数中,这就是你所需要的(更何况,lambdas)。

        不过,在python 2.x 中,通过从标准库的未来模块中导入,您可以很容易地获得打印功能。看看吧:

        >>>from __future__ import print_function
        >>>
        >>>iterable = ["a","b","c"]
        >>>map(print, iterable)
        a
        b
        c
        [None, None, None]
        >>>
        

        我想这看起来有点奇怪,所以如果你想抑制 [None, None, None] 的输出,请随意将 return 分配给 _(我假设你只对副作用感兴趣) :

        >>>_ = map(print, iterable)
        a
        b
        c
        >>>
        

        【讨论】:

          【解决方案5】:

          要添加 chepner 对 Python 3.0 的回答,您也可以这样做:

          x = lambda x: list(map(print, x))
          

          当然,这只有在你以后有办法使用 Python > 3 的情况下……在我看来看起来有点干净,但它也有一个奇怪的返回值,但你可能还是要丢弃它。

          我将把它留在这里以供参考。

          【讨论】:

          • 稍微短一点:y = list(map(print, x))
          【解决方案6】:

          由于for 循环是一个语句(就像print,在 Python 2.x 中一样),所以不能将它包含在 lambda 表达式中。相反,您需要在sys.stdout 上使用write 方法以及join 方法。

          x = lambda x: sys.stdout.write("\n".join(x) + "\n")
          

          【讨论】:

            猜你喜欢
            • 2012-09-09
            • 2019-01-09
            • 1970-01-01
            • 1970-01-01
            • 2010-11-08
            • 1970-01-01
            • 2013-03-03
            • 2011-10-11
            • 2010-12-31
            相关资源
            最近更新 更多