Python遍历双列表计算达标日最大生产总成本的问题排查
代码错误原因及修正方案
核心错误点
你的代码存在4个问题导致结果不符合预期:
- 递归返回值未接收:触发递归调用
calc时没有将返回值赋值给当前的money变量,递归计算的结果完全没有生效,最终返回的是第一次循环全量累加的成本。 - 切片范围错误:传给下一轮递归的
labels切片为labels[i:],会重复计算当前已处理的第i位元素,正确应为labels[i+1:]。 - 成本索引错位:嵌套函数
calc直接使用外层原始cost列表,每次循环都从cost[0]开始累加,和当前递归轮次的labels切片完全不匹配,导致成本计算完全错位。 - 未终止当前循环:触发递归后没有跳出当前轮次的循环,会继续遍历当前切片剩余元素,造成重复累加。
优化实现
该需求不需要用递归,单次遍历即可实现,逻辑更简洁不易出错:
def maxCost(cost, labels, dailyCount): current_legal = 0 current_daily_cost = 0 total_cost = 0 for c, label in zip(cost, labels): current_daily_cost += c if label == 'legal': current_legal += 1 # 达到日产量,累计总成本后重置当日计数 if current_legal == dailyCount: total_cost += current_daily_cost current_legal = 0 current_daily_cost = 0 return total_cost # 官方示例测试 cost = [1,3,2,5,4,1] labels = ['legal', 'illegal', 'legal', 'legal', 'legal', 'legal'] dailyCount = 2 print(maxCost(cost, labels, dailyCount)) # 输出15,符合预期
内容的提问来源于stack exchange,提问作者siddharth tanwar
相关产品推荐
相关产品推荐

