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 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿