weixin_49152204 2021-04-08 15:25 采纳率: 50%
浏览 219
已采纳

python 穷举10个人划分到三个组的所有组合

我想10个人划分到3个组(A,B,C)中,也就是每个人都有三种选择,所以一共有3**10=59049种,想最终得出来的结果是

A=[1],B=[2],C=[3,4,5,6,7,8,9,10]

A=[1],B=[3],C=[2,4,5,6,7,8,9,10]

A=[1],B=[4],C=[2,3,5,6,7,8,9,10]

························································

A=[3,4,5,6,7,8,9,10],B=[2], C=[1]

  • 写回答

5条回答 默认 最新

  • CSDN专家-孙老师 2021-04-08 16:40
    关注

    可以尝试用itertools这个模块进行迭代,这个模块里面有很多创建迭代器的函数。

    给一个思路:

    第一组的元素个数最多可能有8个,取值范围为1-10。

    当第一个组为1个元素的时候,第二组的元素个数最多可能为8个;

    当第一个组为2个元素的时候,第二组的元素个数最多可能为7个;

    以此类推,当第一个组为i个元素的时候,第二组的元素个数最可能为9-i,取值范围为1-10,并减去第一组的元素,剩余记为rem。

    第三组的元素则为rem减去第二组中的元素。

    itertools.combinations可以对一个集合的元素按照个数进行不同的组合,例如,从1-10中任取2个数字,可能有以下组合。

    import itertools
    L1 = itertools.combinations(range(1,11), 2)
    print(list(L1))
    [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (6, 7), (6, 8), (6, 9), (6, 10), (7, 8), (7, 9), (7, 10), (8, 9), (8, 10), (9, 10)]

    所以,可以按照如下方式写代码:

    import itertools
    
    count=0
    
    set_all=set(range(1,11))
    
    for i in range(1,9):
        for L1 in itertools.combinations(range(1,11), i):
            rem=set_all-set(L1)
            for j in range(1,10-i):
                for L2 in itertools.combinations(rem, j):
                    L3=rem-set(L2)
                    count+=1
                    print(count,end=' ')
                    print(set(L1),set(L2),L3)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改