输入: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] * n
def next_c(li = 0, ni = 0):
if ni == n:
answers.append(copy.copy(one))
return
for lj in range(li, len(l)):
one[ni] = l[lj]
next_c(lj + 1, ni + 1)
next_c()
return answers
def 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 ret
print('部门任务出席所有组合', department({"frontend": 2, "backend": 1, "devops": 0}))
方法二
# 2 部门协调
frontend = [1, 2]
backend = [3, 4]
devops = [5]
from itertools import combinations
from itertools import product
def 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 result
print('部门任务出席所有组合', department({"frontend": 2, "backend": 1, "devops": 0}))