飘逸的python - 解决一个有限制的组合需求

时间:2022-02-18 23:59:22

假设有一个团队技能的需求。
这类技能是要集齐所有指定的人就能激活。

但是因为同一个人又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)

输出:

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

飘逸的python - 解决一个有限制的组合需求的更多相关文章

  1. 飘逸的python - 实现一个pretty函数美丽的输出嵌套字典

    演示样例: d = { "root": { "folder2": { "item2": None, "item1": N ...

  2. 飘逸的python - 实现一个极简的优先队列

    一个队列至少满足2个方法,put和get. 借助最小堆来实现. 这里按"值越大优先级越高"的顺序. #coding=utf-8 from heapq import heappush ...

  3. 飘逸的python - __new__、__init__、__call__傻傻分不清

    __new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是sel ...

  4. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...

  5. 有关科学计算方面的python解决

    在科学计算方面,一般觉得matlab是一个超强的东西.此外还有R. 至于某种语言来说,一般都要讲究一些特别的算法,包含但不限于: 矩阵方面的计算 指数计算 对数计算 多项式运算 各类方程求解 总之.仅 ...

  6. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  7. 高德API+Python解决租房问题(.NET版)

    源码地址:https://github.com/liguobao/58HouseSearch 在线地址:58公寓高德搜房(全国版):http://codelover.link:8080/ 周末闲着无事 ...

  8. Python-黑客-004 用Python构建一个SSH僵尸网络-02 手动与SSH交互

    用Python构建一个SSH僵尸网络-02 手动与SSH交互 - 登录SSH服务器端的 root 用户 我的电脑(攻击者)的系统:Ubuntu14.04 : 用户名: aobosir@ubuntu:~ ...

  9. python笔记-用python解决小学生数学题【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前几天有人在群里给小编出了个数学题: 假设你有无限数量的邮票,面值分别为 ...

随机推荐

  1. ASp.net 注册

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs ...

  2. NDK jni 加载静态库

    加载静态库到android,静态库的提供方式有2种, a. 通过源文件来编译静态库 b. 加载已经编译好的静态库 首先我们来看,通过源文件来编译静态库,工程目录如下 第一步:我们来看我们的jni目录, ...

  3. hdu 5442 Favorite Donut 后缀数组

    Favorite Donut Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid ...

  4. vue的配置环境篇

    1.电脑已经安装的nodejs和webpack. 2.1)打开cmd.win+r.可以直接输入node -v查看版本.安装淘宝镜像  npm install -g cnpm --registry=ht ...

  5. django如何查看mysql已有数据库中已有表格

    首先正常创建django项目,配虚拟环境,改配置文件,正常创建models,创建迁移和启动迁移等 接着通过找到Terminal窗户,双击,打开窗口 输入命令 python manage.py in i ...

  6. stm8 iar开发

    1.一份官方库基本是通用的. 2.尽量依托cubex for stm8 依托理由: 1.不同型号,不同后缀的芯片,将会被配置不同的外设.比如stm8s103k3系列可能有的是串口1,但是stm8s10 ...

  7. HDU-1074&period;DoingHomework&lpar;撞鸭dp二进制压缩版&rpar;

    之前做过一道二进制压缩的题目,感觉也不是很难吧,但是由于见少识窄,这道题一看就知道是撞鸭dp,却总是无从下手....最后看了一眼博客,才顿悟,本次做这道题的作用知识让自己更多的认识二进制压缩,并无其它 ...

  8. Mac 下使用 brew 安装软件

    官网:http://brew.sh/安装 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/m ...

  9. js 下拉加载

    // 下拉加载    var clientHeight = $(window).height() //当前可视的页面高度    console.log(clientHeight) //滚动条到页面底部 ...

  10. 对转换公式为LaTeX代码要注意什么

    mathtype是一款专业的数学公式编辑工具,理科生专用的工具.mathtype公式编辑器能够帮助用户在各种文档中插入复杂的数学公式和符号.可以轻松的将数学公式转换成LaTex代码,但是转换LaTeX ...