Codewars中Delta Generators函数执行超时(12000ms)求助
解决Delta函数超时问题
需求回顾
实现delta函数,接收数值序列和正整数level,返回序列的n阶差值(差值定义为后项减前项,如[1,3,2]→[2,-1]),level为差值的阶数(例如加速度是位置的2阶差值)。
示例:
input = [1, 2, 4, 7, 11, 16, 22] list(delta(input, 1)) # [1, 2, 3, 4, 5, 6] list(delta(input, 2)) # [1, 1, 1, 1, 1] list(delta(input, 3)) # [0, 0, 0, 0]
优化后的实现
def delta(values, n): current = list(values) for _ in range(n): # 用列表推导式生成下一阶差值,内部优化过的操作比手动循环更快 current = [current[i+1] - current[i] for i in range(len(current)-1)] # 序列长度不足时提前终止循环,避免无效操作 if not current: break return current
原代码超时原因分析
- 不必要的内存操作:原代码中多次调用
clear()和copy(),这些操作会额外消耗时间和内存,尤其是处理大序列时,每次复制整个列表的成本极高。 - 低效的元素赋值:手动循环给预分配的列表赋值,效率远低于Python内部优化的列表推导式——列表推导式在C层面执行,比纯Python循环快得多。
- 冗余操作:原代码中
lst.clear()后立刻重新赋值lst = [0]*(len(values)-1),clear()完全是多余的,徒增操作开销。
验证示例
运行优化后的代码,完全符合预期输出:
input = [1, 2, 4, 7, 11, 16, 22] print(delta(input, 1)) # [1, 2, 3, 4, 5, 6] print(delta(input, 2)) # [1, 1, 1, 1, 1] print(delta(input, 3)) # [0, 0, 0, 0]
内容的提问来源于stack exchange,提问作者Nika
相关产品推荐
相关产品推荐

