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

Python循环生成类别三元组合包 避免顺序不同的重复结果问题

生成符合要求的三元组合包解决方案

原代码问题分析

  • 逻辑判断不完整:仅限制了相邻循环变量不等,既没有排除(c1,c1,c1)这类三个元素完全重复的情况,也没有限制元素顺序,会生成大量元素相同但排序不同的重复组合
  • 语法错误:bundling_list.append(bundling) 写在了if c != y:的判断分支外,即使c == y未触发bundling赋值,也会强行追加变量,导致出现重复或异常值

最优实现方案

Python标准库itertools的combinations_with_replacement方法天生满足「元素相同顺序不同视为同一组合、允许重复元素」的需求,只需额外过滤掉三个元素完全相同的情况即可:

import itertools

list_category = ['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10']
bundling_list = []

# 生成所有不考虑顺序、允许元素重复的三元组合
for combo in itertools.combinations_with_replacement(list_category, 3):
    # 过滤掉三个元素完全相同的情况
    if not (combo[0] == combo[1] == combo[2]):
        # 转成横杠连接的字符串格式
        bundling_list.append('-'.join(combo))

print(bundling_list)

手动循环实现(不依赖标准库以外的工具)

如果要手动写三层循环实现,可以限制每次循环的起始索引大于等于上一层的索引,从根源避免生成顺序不同的重复组合:

list_category = ['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10']
n = len(list_category)
bundling_list = []

for i in range(n):
    for j in range(i, n):
        for k in range(j, n):
            # 排除三个元素完全相同的情况
            if not (i == j == k):
                bundling = f"{list_category[i]}-{list_category[j]}-{list_category[k]}"
                bundling_list.append(bundling)

print(bundling_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:09:03