如何在已有全组合的列表中新增元素后获取新增三元组合?
高效计算新增元素后的三元组合
当原列表规模较大时,重新生成全部三元组合再筛选新增项会浪费大量计算资源,直接针对新增元素的组合类型生成目标三元组是最优方案。新增的三元组合可分为三类:
- 1个新增元素 + 原列表中任意2个元素的组合
- 2个新增元素 + 原列表中任意1个元素的组合
- 3个均为新增元素的组合(仅当新增元素数量≥3时存在)
代码实现
import itertools # 原列表(实际场景可能包含约100个元素) old_list = ['a', 'b', 'c', 'd'] # 新增的候选元素 new_elements = ['e', 'f'] new_triples = [] # 生成「1个新增元素 + 原列表二元组」的组合 for new_item in new_elements: for pair in itertools.combinations(old_list, 2): new_triples.append(list(pair) + [new_item]) # 生成「2个新增元素 + 原列表单个元素」的组合 if len(new_elements) >= 2: for new_pair in itertools.combinations(new_elements, 2): for old_item in old_list: new_triples.append(list(new_pair) + [old_item]) # 生成「3个新增元素」的组合(当新增元素数量≥3时) if len(new_elements) >= 3: new_triples.extend(list(comb) for comb in itertools.combinations(new_elements, 3)) # 输出结果示例 for triple in new_triples: print(triple)
效率说明
以原列表100个元素、新增2个元素为例:
- 原三元组合总数为
C(100,3) = 161700 - 新增组合总数仅为
C(100,2)*2 + C(100,1) = 4950*2 + 100 = 10000
计算量仅为全量生成的6%左右,完全规避了重复计算原有组合的开销。
内容的提问来源于stack exchange,提问作者shawn.mek
相关产品推荐
相关产品推荐

