Python数组组合求和逻辑中while循环无法正常终止问题
数组组合筛选逻辑无限循环问题定位与修正
明确开发目标
- 逐轮基于基础数组
array,为f_ext_ele_groups内的每个元素组追加数组元素,生成新的组合 - 组合累加和等于10时,直接存入
front_design_array作为最终结果 - 仅当组合累加和≤10时,才会被纳入下一轮迭代的候选列表;和值超10的组合直接丢弃,不进入下一轮循环
触发死循环的核心代码疏漏
- 变量作用域缺陷:
draft列表仅在sumation <10的分支内初始化,当本轮所有待处理组合的和值都等于10时,代码不会触发初始化逻辑,draft会保留上一轮的旧值,永远无法清空,导致length始终大于0,循环无法终止 - 计算逻辑错位:判断追加元素后的和值时,仅取原组合的第一个元素
var[0]与新元素相加,没有使用原组合的真实累加和sumation做计算,和值判断完全失真 - 列表初始化位置错误:
draft = []写在单个待处理组合的循环内部,每处理一个组合就会清空之前已存入的候选值,导致最后仅能保留最后一个组合生成的候选 - 组合生成不完整:追加新元素时仅生成
[var[0], ele]的短列表,没有拼接原组合的完整元素链,丢失了之前的组合上下文
修正后的可运行代码
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] f_ext_ele_groups = [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]] front_design_array = [] while len(f_ext_ele_groups) > 0: # 每轮循环最外层初始化空候选列表,避免作用域问题 draft = [] for var in f_ext_ele_groups: sumation = sum(var) if sumation == 10: front_design_array.append(var) elif sumation < 10: for ele in array: new_group_sum = sumation + ele if new_group_sum <= 10: # 拼接完整原组合 + 新元素,生成完整候选组 new_group = var + [ele] draft.append(new_group) f_ext_ele_groups = draft
修正后逻辑校验:当本轮没有符合要求的候选组合时,
draft会为空列表,f_ext_ele_groups长度为0,循环自动终止。
内容的提问来源于stack exchange,提问作者Cumhur Yıldırım
相关产品推荐
相关产品推荐

