如何用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
相关产品推荐
相关产品推荐

