【问题标题】:How to write a Python for loop as a lambda function with apply or map instead?如何使用 apply 或 map 将 Python for 循环编写为 lambda 函数?
【发布时间】:2020-09-23 17:01:20
【问题描述】:

我将如何编写使用lambda函数和应用或映射代码?我看过几篇博客文章等,但由于某种原因,我觉得我错过了一些东西。我觉得应该真的很简单。

for i in range(2,5):
    print(f'I only have {i} friends, but they are awesome.')

# I only have 2 friends, but they are awesome.
# I only have 3 friends, but they are awesome.
# I only have 4 friends, but they are awesome.

【问题讨论】:

  • 你不会的。循环是执行一系列语句的适当和首选方式。

标签: python for-loop iteration apply


【解决方案1】:

循环对于这个任务来说已经足够了,但是如果由于某种原因你必须使用 lambda 和 map,你可以这样做:

list(map(lambda x: print(f"I only have {x} friends, but they are awesome."), range(2, 5)))

表达式需要包裹在list() 中,因为map 函数是急切执行的,这意味着它在需要之前不会计算输出。

【讨论】:

  • 谢谢。这正是我所需要的。我认为我在自己的尝试中缺少的是 list()。为了澄清,上面的循环不是我正在做的实际任务,而只是一个可重复的例子哈哈。再次感谢您的帮助。
【解决方案2】:

你不只是使用 lambda 或 map 来执行上面的代码,但是如果你想只使用 lambda 或 map 来实现,你需要将 map 对象转换为一个列表。

list(map(lambda x:print(f'I only have {x} friends, but they are awesome.'), range(2,5)))

【讨论】:

    【解决方案3】:

    您根本不想使用 lambda,不可读。 Lambda 表达式不能包含循环、语句。它们只能包含表达式(想想数学),但是,您的问题可以像下面这样处理。

    s = 'I only have {} friends, but they are awesome.'
    f = lambda x: list(map(print, map(s.format, x)))
    f([1, 2, 3])
    

    我们调用 list 来强制评估结果生成器,注意它被调用了 3 次 ([1, 2, 3]),因此返回了 [None, None, None]。结果生成器基本上是将打印函数映射到类似于 [s.format(1), s.format(2), s.format(3)]

    的列表上

    我只想告诉你怎么做,但这是一个非常糟糕的方法。

    我们可以对 fstrings 或百分比 % 做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多