如何从多组元素中生成跨组二元组合?
生成不同分组间的二元元素组合
你需要的是任意两个不同分组之间的所有元素配对,而itertools.product(*groups.values())会生成每个分组取一个元素的N元组(N为分组数量),自然不符合需求。可以通过以下方式实现:
解决方案
利用itertools.combinations先筛选出所有两两不同的分组对,再对每对分组用itertools.product生成元素组合:
函数实现(分步版)
import itertools def get_combs(group_list): result = [] # 遍历所有不重复的两两分组对 for group_a, group_b in itertools.combinations(group_list, 2): # 生成当前分组对的所有元素二元组合并加入结果 result.extend(itertools.product(group_a, group_b)) return result
简化版(列表推导式)
import itertools def get_combs(group_list): return [ pair for groups_pair in itertools.combinations(group_list, 2) for pair in itertools.product(*groups_pair) ]
测试验证
groups = {'g1': [1, 2, 3], 'g2': [55, 66], 'g3': [888]} print(get_combs(groups.values())) # 输出:[(1, 55), (1, 66), (1, 888), (2, 55), (2, 66), (2, 888), (3, 55), (3, 66), (3, 888), (55, 888), (66, 888)]
逻辑说明
itertools.combinations(group_list, 2):从分组列表中选出所有不重复的两两分组对(例如(g1,g2)、(g1,g3)、(g2,g3)),避免生成反向配对(如(g2,g1))导致重复结果。itertools.product(group_a, group_b):生成两个分组内元素的所有有序二元组合,正好匹配你需要的跨分组元素配对形式。
内容的提问来源于stack exchange,提问作者ycuk
相关产品推荐
相关产品推荐

