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

如何生成前两列值均无重复的多行组合?附示例说明

解决方案:筛选前两列无重复的行组合

核心思路

要解决这个问题,关键是生成所有指定行数的行组合,然后过滤出满足A列值全唯一且B列值全唯一的组合,最后计算价格总和并按格式输出。手动嵌套循环容易出错,借助itertools.combinations可以高效生成所有可能的组合。

代码实现(Python)

import itertools

# 示例数据集,每个元素为(A, B, PRICE)元组
data = [
    (1, 3, 8),
    (2, 3, 7),
    (1, 4, 6),
    (2, 4, 5),
    (1, 5, 4),
    (2, 5, 3),
    (3, 5, 2)
]

def get_valid_combinations(data, row_count):
    valid_results = []
    # 生成所有row_count行的组合
    for combo in itertools.combinations(data, row_count):
        # 提取组合中的A、B列值
        a_columns = [item[0] for item in combo]
        b_columns = [item[1] for item in combo]
        # 检查A、B列是否无重复(集合长度等于组合行数则无重复)
        if len(set(a_columns)) == row_count and len(set(b_columns)) == row_count:
            total = sum(item[2] for item in combo)
            # 格式化组合的字符串展示
            combo_str = "; ".join([f"({item[0]}, {item[1]})" for item in combo])
            valid_results.append(f"{combo_str} = {total}")
    return valid_results

# 获取2行的有效组合(支持修改row_count为3、4等数值)
output = get_valid_combinations(data, row_count=2)
for line in output:
    print(line)

代码说明

  1. 生成组合:itertools.combinations(data, row_count)会生成所有不重复的row_count行组合,避免手动写多层循环的复杂度。
  2. 重复检查:利用集合自动去重的特性,若A列/ B列的集合长度等于组合行数,说明该列无重复值。
  3. 格式输出:将符合条件的组合按(A,B); (A,B) = 总和的格式整理输出。

扩展支持多行组合

只需修改row_count参数即可支持2行以上的组合。比如设置row_count=3,会自动筛选出所有3行且A、B列均无重复的组合。

内容的提问来源于stack exchange,提问作者briturr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:54:21