需求描述:
这是一个实际生活中遇到的需求,一共有8个人需要在一周的5个工作日值班,每天都需要5个人完成值班任务,其中有一个人是个组长。要求组长在这5天里一共值班4次,其他人员均值班3次,每天的5个值班人员是8个人中的5人随机组合。
分析:
乍一看,好像有点无从下手,咱们细细分析就可以这样考虑,我们假设每个人都有分身术,组长一共有4个分身,其他人均有3个分身,这时正好25个人,组合后正好可以满足5天(25人)的值班要求。我们就可以对这25个假设对象进行随机分组,唯一的要求就是:同一身份的人不能分到一组中(即同一个人的分身不能分到一起)。分5组即可。
Python实现(Python3.7):
import random
# 构建分身数据源(25个分身对象)
def get_source_data():
data = []
for i in range(4):
data.append({"name":"组长", "role":i}) # role表示分身ID
for i in range(7):
for j in range(3):
data.append({"name": "组员" + str(i), "role": j})
return data
# 进行5次选择,选出5组
def group_by_random():
des_list = []
data_list = get_source_data()</