Удалить случайные элементы из списка в Python с условиями - PullRequest
0 голосов
/ 05 ноября 2018

У меня такая ситуация:

Диапазон дней (скажем, рабочих смен) и разное количество людей, которые не могут охватывать рабочие смены в определенные дни. Каждый день диапазона должен быть покрыт двумя работниками.

Итак, новичок, который я нашел, заключается в том, что в списках один за другим отображаются свободные дни для каждого работника с отметкой 0, когда они не могут работать.

period_of_time = range(1,10)

human_1 = [1, 3, 4, 8, "Human 1"]
human_2 = [5, 6, "Human 2"]
human_3 = [8, 9, "Human 3"]
human_4 = [2, 4, 6, "Human 4"]

humans = [human_1, human_2, human_3, human_4]

def looping_function(in_humans):
    new = []
    for d in period_of_time:
        if d not in in_humans:
            new.append(d)
        else:
            new.append(0)
    print(str(new) + " " + human_id + "\n")

for a in humans:
    in_humans = a
    human_id = a[-1]
    looping_function(in_humans)

Работает нормально.

[0, 2, 0, 0, 5, 6, 7, 0, 9] Human 1

[1, 2, 3, 4, 0, 0, 7, 8, 9] Human 2

[1, 2, 3, 4, 5, 6, 7, 0, 0] Human 3

[1, 0, 3, 0, 5, 0, 7, 8, 9] Human 4

И сейчас это полезно. Учитывая, что я работаю над этим только для учебных целей. Теперь я хочу исключить случайные предметы из списков, чтобы на каждый день диапазона было только два человека. Я застрял здесь.

1 Ответ

0 голосов
/ 05 ноября 2018

При использовании вашего кода, вам нужно просто пройтись по расписанию и добавить идентификаторы

period_of_time = range(1,10)

human_1 = [1, 3, 4, 8, "Human 1"]
human_2 = [5, 6, "Human 2"]
human_3 = [8, 9, "Human 3"]
human_4 = [2, 4, 6, "Human 4"]

humans = [human_1, human_2, human_3, human_4]

def looping_function(in_humans):
    new = []
    for d in period_of_time:
        if d not in in_humans:
            new.append(d)
        else:
            new.append(0)
    print(str(new) + " " + human_id + "\n")
    return new

schedule = []
for a in humans:

    in_humans = a
    human_id = a[-1]
    schedule.append(looping_function(in_humans))

for x in range(9):
    current_day_workers = 0
    for human in schedule:
        if human[x] != 0: current_day_workers +=1
        if current_day_workers >2: human[x] = 0

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