• 飘逸的python


    假设有一个团队技能的需求。
    这类技能是要集齐所有指定的人就能激活。
    但是因为同一个人又2种身份存在,比如杨戬/神杨戬,于是便产生了组合。
    这种组合跟普通组合不一样,普通组合可以随意组合。而这种组合是每个人都必须选,遇2选1。
    比如['杨戬/神杨戬','猪八戒']可组合成
    ['杨戬','猪八戒']
    ['神杨戬','猪八戒']
    但不能组合成['杨戬','神杨戬'].

    思路:
    只有1种身份的人不会产生组合,是固定的,所以分开处理。
    将对人的2选1组合转换二进制0和1的组合。
    利用itertools.product(iterable, repeat)特性

    下面上代码

    import itertools
    group = ['杨戬/神杨戬','嫦娥','沉香/神沉香']
    skill1 = [x for x in group if '/' not in x]
    skill2 = [x.split('/') for x in group if '/' in x]
    masks = list(itertools.product([0,1], repeat=len(skill2)))
    result = [[s[mask[i]] for i,s in enumerate(skill2)]+skill1 for mask in masks]
    
    import pprint
    pprint.pprint(result)
    


    输出:

    [['杨戬', '沉香', '嫦娥'],
     ['杨戬', '神沉香', '嫦娥'],
     ['神杨戬', '沉香', '嫦娥'],
     ['神杨戬', '神沉香', '嫦娥']]

  • 相关阅读:
    gitLab、docker
    Spring源码分析
    Tomcat堆内存分析
    Kafka入门一
    Java NIO
    spring注解
    websocket即时通讯
    pycharm安装dlib库
    python+opencv人脸识别是否戴口罩
    2021年暑假周总结1
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3304076.html
Copyright © 2020-2023  润新知