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

如何用Python列表推导式生成首项80000、公比1.3的等比数列?

用列表推导式生成指定等比数列

要生成以80000为起始、每项是前一项1.3倍的列表,你原来的代码存在两个核心问题:

  • 错误使用了1.5作为乘数,需求里是1.3
  • range(10)生成的是等差数列,无法满足等比数列的依赖关系(每一项需要基于前一项计算)

方法1:自定义生成器配合列表推导式

先写一个生成等比数列的生成器函数,再用列表推导式遍历生成器:

def geometric_sequence(start, ratio, length):
    current = start
    for _ in range(length):
        yield current
        current *= ratio

# 生成前5项的例子
a = [num for num in geometric_sequence(80000, 1.3, 5)]
print(a)  # 输出: [80000, 104000.0, 135200.0, 175760.0, 228488.0]

方法2:用itertools.accumulate简化(可结合列表推导式)

如果允许使用标准库,itertools.accumulate可以高效处理这种累积计算:

import itertools

# 生成前5项,第一个元素是起始值,后面4个是乘数1.3
a = [item for item in itertools.accumulate([80000] + [1.3]*4, lambda x, y: x * y)]
print(a)  # 输出: [80000, 104000.0, 135200.0, 175760.0, 228488.0]

方法3:纯列表推导式(不推荐,可读性差)

如果非要纯列表推导式(不借助生成器或库),可以利用副作用维护当前值,但这种写法可读性低,不建议实际使用:

current = [80000]
a = [current[0] for _ in range(5) if not (current.append(current[0]*1.3) or True)]
a = a[:-1]  # 移除append额外添加的元素
print(a)  # 输出: [80000, 104000.0, 135200.0, 175760.0, 228488.0]

本质上等比数列的每一项依赖前一项,最清晰的写法还是生成器配合列表推导式,既满足需求又保证代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:55:35