如何生成前两列值均无重复的多行组合?附示例说明
解决方案:筛选前两列无重复的行组合
核心思路
要解决这个问题,关键是生成所有指定行数的行组合,然后过滤出满足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)
代码说明
- 生成组合:
itertools.combinations(data, row_count)会生成所有不重复的row_count行组合,避免手动写多层循环的复杂度。 - 重复检查:利用集合自动去重的特性,若A列/ B列的集合长度等于组合行数,说明该列无重复值。
- 格式输出:将符合条件的组合按
(A,B); (A,B) = 总和的格式整理输出。
扩展支持多行组合
只需修改row_count参数即可支持2行以上的组合。比如设置row_count=3,会自动筛选出所有3行且A、B列均无重复的组合。
内容的提问来源于stack exchange,提问作者briturr
相关产品推荐
相关产品推荐

