You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:06:04