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

如何用Python判断一个序列是否为调和数列(Harmonic Progression)?

调和数列判断的替代实现方案

调和数列的核心判定逻辑是序列所有元素的倒数构成等差数列,以下是几种替代if-else嵌套的实现方案:

方案1:用all()函数简化核心判断

这种写法简洁直观,把验证逻辑压缩到一行,避免冗余的分支判断:

def is_harmonic_progression(seq):
    if len(seq) <= 2:
        return True
    if 0 in seq:
        return False
    inv_seq = [1/x for x in seq]
    common_diff = inv_seq[1] - inv_seq[0]
    # 用all()验证所有相邻倒数的差值是否一致
    return all(inv_seq[i] - inv_seq[i-1] == common_diff for i in range(2, len(inv_seq)))

方案2:迭代遍历+提前终止

针对长序列优化,一旦发现不满足条件就立即返回,减少不必要的计算:

def is_harmonic_progression(seq):
    n = len(seq)
    if n <= 2:
        return True
    # 先检查是否存在0元素
    for num in seq:
        if num == 0:
            return False
    # 计算初始倒数差值
    prev_inv = 1 / seq[0]
    curr_inv = 1 / seq[1]
    diff = curr_inv - prev_inv
    # 遍历剩余元素验证差值
    for i in range(2, n):
        next_inv = 1 / seq[i]
        if next_inv - curr_inv != diff:
            return False
        curr_inv = next_inv
    return True

方案3:避免浮点误差的整数运算(适用于整数序列)

如果输入序列的元素都是整数,可通过代数变形把倒数运算转为乘法,彻底规避浮点数精度问题:

原判定条件:1/h[i] - 1/h[i-1] = 1/h[i+1] - 1/h[i]
整理后等价于:2 * h[i-1] * h[i+1] = h[i] * (h[i-1] + h[i+1])

def is_harmonic_progression(seq):
    n = len(seq)
    if n <= 2:
        return True
    for num in seq:
        if num == 0:
            return False
    # 用整数乘法验证条件
    for i in range(1, n-1):
        if 2 * seq[i-1] * seq[i+1] != seq[i] * (seq[i-1] + seq[i+1]):
            return False
    return True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:01:16