Python如何高效从多组变量列表选值生成总和落在指定区间的组合
高效Python实现方案
核心优化逻辑很简单:因为目标是找偏大的和,我们直接从每个列表的最大值开始遍历,找到第一个符合条件的就立刻终止,不需要遍历所有小值组合,最优场景下一次计算就能得到结果。
实现代码
import itertools # 原始变量定义 var_1 = [0.5, 1, 2] var_2 = [0.5, 1, 4, 7.5] var_3 = [1, 1.5, 3.5, 4, 5.5, 10] # 获胜区间定义 winning_low = 15 winning_high = 20 # 给每个列表绑定变量名,同时按降序排序,优先遍历大值 named_sorted_lists = [ ("var_1", sorted(var_1, reverse=True)), ("var_2", sorted(var_2, reverse=True)), ("var_3", sorted(var_3, reverse=True)) ] names, sorted_lists = zip(*named_sorted_lists) # 遍历笛卡尔积,找到第一个符合条件的组合就终止 for values in itertools.product(*sorted_lists): total = sum(values) if winning_low <= total <= winning_high: # 构造结果 result = dict(zip(names, values)) result["total"] = total # 按要求格式打印 print("{" + ", ".join([f"{k} = {v}" for k, v in result.items()]) + "}") break
输出结果
运行后直接输出符合要求的格式:
{var_1 = 2, var_2 = 7.5, var_3 = 10, total = 19.5}
效率说明
- 示例场景下第一次遍历就是三个列表的最大值组合,直接命中结果,仅需1次求和计算,不需要遍历剩下的所有组合
- 如果目标区间偏小,只需要把排序规则改成升序即可,同样能最快命中目标
- 只要有符合条件的组合,就会在首次命中时终止程序,不会做多余的计算
内容的提问来源于stack exchange,提问作者user1193480
相关产品推荐
相关产品推荐

