首页 > 解决方案 > 根据学期将人员从列表分配到组

问题描述

注意,我是一个该死的初学者:这对你们大多数人来说可能听起来很微不足道,但我还没有找到一个有效的解决方案。我想编写一个随机化脚本来促进分配组的过程,因为我必须经常这样做。它应该能够从参与者列表中形成随机但“均匀分布”的组,这意味着来自不同学期的参与者应该尽可能平等地出现在每个组中。

到目前为止,我有两个不同的想法来解决这个问题:1)我想创建一个包含参与者姓名和该参与者所在学期的字典。然后我将创建组并根据条件附加参与者(每个组都有一个最大值。 5 人组,每学期不超过 2 人),如果不满足条件,则将参与者分配到下一组,直到每个组都满员。

2)我考虑创建一个列表,其中包含名称和数字作为组合字符串(例如“2Tom”),并将该列表打乱,同时将其分成五个子组,条件是同一学期的参与者不超过两个(我会用 .startswith("2",0) 检查)。

这两种解决方案对我来说似乎都不必要地复杂。而且我还没有走多远。我从第二个想法开始(尽管第一个更好,但我还不熟悉字典)。我创建了一个列表,设法对其进行洗牌并将其分成几组,但我无法在学期中建立条件。

另外,我已经搜索了很多,看看网络上是否已经有类似的问题/解决方案,但找不到任何对我有帮助的问题。如果您找到解决方案,请分享链接!

任何帮助是极大的赞赏!我想用这个脚本让我的生活更轻松,但到目前为止它只会让它变得更难哈哈。

非常感谢您!

到目前为止,这是我对第二个想法的看法:

participants = #list of participants that I do not want to disclose here

def check(participants):

    for people in participants:
        if people.startswith("2",0) == True:
            print("2ndsemester")
        if people.startswith("4",0) == True:
            print("4thsemester")
        if people.startswith("6",0) == True:
            print("6thsemester")

while check(participants):
    np.random.shuffle(participants)

myarray = np.asarray(participants)
groups = np.split(myarray, 5)
print(groups)

“检查”功能最终应该能够检查列表是否均匀分布,但我不知道这样做很热。我正在考虑检查连续的三个项目是否包含相同的学期,如果是,则随机播放。但是这个解决方案并不聪明,因为它只有在每个学期在列表中的代表相同的情况下才有效,但事实并非如此。

为了简化要求:我想创建一个函数,可以将参与者列表分成所需数量的组,并且每个组应该由每个学期的相同数量的参与者组成(所以没有一个组包含所有第 6 个学期只要)。我认为使用字典可能比使用列表更明智。

标签: pythonpython-3.xlistrandom

解决方案


推荐阅读