输入:departments: dict, key是部门名, value是每个部门对应所有员工ID数组required_department: dict, 该任务需要参与的部门和需要的人数
输出:
所有可能的员工组合
例:<br />({ frontend: [1, 2], backend: [3, 4],<br />devops: [5] }, { frontend: 2, backend: 1 }) => [ [1,2,3], [1,2,4]]<br />
frontend = [1, 2]backend = [3, 4]devops = [5]#l为数组,n为n个元素组合def combine(l, n):answers = []one = [0] * ndef next_c(li = 0, ni = 0):if ni == n:answers.append(copy.copy(one))returnfor lj in range(li, len(l)):one[ni] = l[lj]next_c(lj + 1, ni + 1)next_c()return answersdef department(require):fr = combine(frontend, require.get("frontend", 0))ba = combine(backend, require.get("backend"))de = combine(devops, require.get("devops"))ret = []for f in fr:for b in ba:for d in de:ret.append(f + b + d)return retprint('部门任务出席所有组合', department({"frontend": 2, "backend": 1, "devops": 0}))
方法二
# 2 部门协调frontend = [1, 2]backend = [3, 4]devops = [5]from itertools import combinationsfrom itertools import productdef department(require):fr = list(combinations(frontend, require.get("frontend", 0)))ba = list(combinations(backend, require.get("backend", 0)))de = list(combinations(devops, require.get("devops", 0)))ret = list(product(fr, ba, de))result = []for r in ret:result.append(list(r[0]) + list(r[1]) + list(r[2]))return resultprint('部门任务出席所有组合', department({"frontend": 2, "backend": 1, "devops": 0}))
