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

Python高效生成列表符合分组规则无重复组名组合的实现方法

高效筛选分组元素组合方案

原有代码的性能问题

原有实现性能差的核心原因是未利用已知的分组规则,先全量枚举所有元素组合再做校验,组合数随分组数x、每组元素数y的增长呈指数级暴涨,且校验逻辑存在大量冗余计算。

优化方案

由于要求每个组合中各分组仅出现一次,直接对每个分组的元素列表做笛卡尔积即可,生成的结果天然符合要求,无需额外校验。

场景1:已持有分组名、后缀值两套独立数据

直接生成各分组的元素列表,再做笛卡尔积即可:

import itertools

# 你的原始分组、后缀数据
gr_list = ['ST1', 'ST2', 'ST3']
suf_list = ['0.245', '0.29', '0.335']

# 生成每个分组对应的所有元素
group_elements = [[f"{g}_{s}" for s in suf_list] for g in gr_list]
# 笛卡尔积直接得到所有符合要求的组合
comb = list(itertools.product(*group_elements))

场景2:仅持有拼接后的元素列表A

先按前缀完成分组,再做笛卡尔积:

from collections import defaultdict
import itertools

A = ['ST1_0.245', 'ST1_0.29', 'ST1_0.335', 'ST2_0.245', 'ST2_0.29', 'ST2_0.335', 'ST3_0.245', 'ST3_0.29', 'ST3_0.335']

# 按前缀分组
group_map = defaultdict(list)
for item in A:
    prefix = item.split('_')[0]
    group_map[prefix].append(item)

# 按分组顺序取元素列表做笛卡尔积
group_elements = list(group_map.values())
comb = list(itertools.product(*group_elements))

性能对比

以x=10、y=5为例,原有实现需要枚举C(50,10)≈102亿次组合,优化后仅需要计算5^10=976万次,性能提升超过1000倍,数据量越大提升效果越显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:06:03