weixin_49152204 2021-04-08 07:25 采纳率: 50%
浏览 222
已采纳

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 08: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)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    weixin_49152204 2021-04-09 08:52

    有没有那种59049种组合的,因为每个人都可以选择三个的其中之一

    回复
    CSDN专家-孙老师 回复 weixin_49152204 2021-04-09 08:55

    组可以为空吗?如果可以为空,每个人会有三个选择。

    回复
    weixin_49152204 回复 CSDN专家-孙老师 2021-04-09 09:01

    我的意思是,10个都选a,剩下两个为空集,不是三个都为空

    回复
    展开全部4条评论
查看更多回答(4条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部