You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用lambda与list comprehension正确改写Python循环

问题重述

需要使用lambda和列表推导式重写以下计算自然常数e近似值的循环代码:

n = 17
e = 0
for i in range(0, n):
    e += 1 / factorial(i)
print(e)

原有尝试代码无法运行,错误代码如下:

lst = [item for item in map(lambda e: e + 1/factorial(i), range(0,n))])

myMap = map(lambda e: e + 1/factorial(i), range(0,n))
原有代码问题
  • 变量引用错误:定义的lambda接收参数e,但函数体内使用了从未被赋值的变量i,运行会直接抛出NameError
  • 累加逻辑错误:map仅对迭代器内的元素做逐元素独立映射,不会保留上一轮的计算结果,无法实现原循环里的累加效果
  • 依赖缺失:Python没有全局内置factorial阶乘函数,该函数在标准库math模块中,未导入就调用会报名称错误
正确实现方案

核心逻辑拆分:用lambda定义单一项的计算规则,通过列表推导式生成所有待累加的项,最后用sum()函数完成统一累加,和原循环逻辑完全等价。

import math

n = 17
# lambda定义单步计算逻辑:传入索引i,返回对应项1/i!
calc_single = lambda i: 1 / math.factorial(i)
# 列表推导生成所有项后求和
e = sum([calc_single(i) for i in range(n)])
print(e)

运行后得到的结果和原循环完全一致,约为2.7182818284590455。

注:如果要兼容之前尝试的map写法,也可以按如下方式实现,但不符合列表推导式优先的要求:

import math
n = 17
e = sum(map(lambda i: 1/math.factorial(i), range(n)))
print(e)

内容的提问来源于stack exchange,提问作者Aleks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:27:29