Назначение людей из списка в группы в зависимости от их семестра - PullRequest
0 голосов
/ 17 апреля 2020

Подожди, я чертов начинающий. Для большинства из вас это может показаться тривиальным, но я пока не нашел эффективного решения. Я хотел написать сценарий рандомизации, чтобы облегчить процесс назначения групп, поскольку я должен делать это довольно часто. Он должен иметь возможность формировать группы из списка участников, которые должны быть случайными, но «равномерно распределенными», что означает, что участники из разных семестров должны быть как можно более одинаково представлены в каждой группе.

До сих пор у меня было две разные идеи: 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 семестров). Я думаю, что было бы разумнее использовать словарь, чем список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...