开发者社区 问答 正文

没有重复的组合然后分裂成独特的元素组

我有一个X元素的列表。我需要产生所有可能的组合(不重复),并把这些项目放入独特的元素组。组中的元素数量应该是声明性的。例如,如果我有一个4个元素的列表,想要每个组有2个项目,它应该是这样的:

l = [1, 2, 3, 4]

所有的组合

1 2
1 3
1 4
2 3
2 4
3 4

我的组

group 1
1 2
3 4

group 2
1 3
2 4

group 3
1 4
2 3

容易的部分已经完成了

from itertools import combinations 

all_items = [1, 2, 3, 4]
cm = list(combinations(all_items, 2))

print('total combinations [{}]: {}'.format(len(cm), cm))

但是这个任务剩下的部分的解决方案是什么呢? 问题来源StackOverflow 地址:/questions/59466898/combinations-without-repetition-then-split-result-into-groups-of-unique-elements

展开
收起
kun坤 2019-12-25 09:38:43 388 分享 版权
阿里云 AI 助理回答

要完成这个任务,你需要在生成所有可能的组合之后,将这些组合分成具有独特元素组的多个组。这里是一个使用Python实现的解决方案:

from itertools import combinations

def split_combinations_into_groups(cm, group_size):
    # 确保组合数量能被组大小整除,否则会有剩余组合无法平均分配
    if len(cm) % group_size != 0:
        raise ValueError("Combination count is not divisible by the group size.")
    
    # 计算每组应有多少个组合
    combinations_per_group = len(cm) // group_size
    
    # 初始化结果列表,用于存放分组后的组合
    grouped_cm = [[] for _ in range(group_size)]
    
    # 遍历所有组合并将其均匀分配到各个组中
    for idx, combo in enumerate(cm):
        # 计算当前组合应归属的组号
        group_index = idx // combinations_per_group
        grouped_cm[group_index].append(combo)
    
    return grouped_cm

# 已经生成的组合
all_items = [1, 2, 3, 4]
cm = list(combinations(all_items, 2))

# 分组
grouped_combinations = split_combinations_into_groups(cm, 2)

print('Grouped Combinations:')
for i, group in enumerate(grouped_combinations, start=1):
    print(f'Group {i}: {group}')

这段代码首先定义了一个split_combinations_into_groups函数,它接收两个参数:一个是所有组合的列表(cm),另一个是希望每个组包含的组合数(group_size)。函数内部计算了每个组应该包含多少个组合,并通过遍历所有组合,根据其索引值来决定该组合属于哪个组,最后返回一个二维列表,其中每个子列表代表一个组及其包含的组合。

注意,此方案假设组合总数能够被组的数量整除,如果不满足这一条件,程序会抛出一个错误。在实际应用中,你可能需要根据具体需求调整错误处理逻辑。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: