输入:
    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 />

    1. frontend = [1, 2]
    2. backend = [3, 4]
    3. devops = [5]
    4. #l为数组,n为n个元素组合
    5. def combine(l, n):
    6. answers = []
    7. one = [0] * n
    8. def next_c(li = 0, ni = 0):
    9. if ni == n:
    10. answers.append(copy.copy(one))
    11. return
    12. for lj in range(li, len(l)):
    13. one[ni] = l[lj]
    14. next_c(lj + 1, ni + 1)
    15. next_c()
    16. return answers
    17. def department(require):
    18. fr = combine(frontend, require.get("frontend", 0))
    19. ba = combine(backend, require.get("backend"))
    20. de = combine(devops, require.get("devops"))
    21. ret = []
    22. for f in fr:
    23. for b in ba:
    24. for d in de:
    25. ret.append(f + b + d)
    26. return ret
    27. print('部门任务出席所有组合', department({"frontend": 2, "backend": 1, "devops": 0}))

    方法二

    1. # 2 部门协调
    2. frontend = [1, 2]
    3. backend = [3, 4]
    4. devops = [5]
    5. from itertools import combinations
    6. from itertools import product
    7. def department(require):
    8. fr = list(combinations(frontend, require.get("frontend", 0)))
    9. ba = list(combinations(backend, require.get("backend", 0)))
    10. de = list(combinations(devops, require.get("devops", 0)))
    11. ret = list(product(fr, ba, de))
    12. result = []
    13. for r in ret:
    14. result.append(list(r[0]) + list(r[1]) + list(r[2]))
    15. return result
    16. print('部门任务出席所有组合', department({"frontend": 2, "backend": 1, "devops": 0}))