Удаление кортежа из списка кортежей во время итерации жадного алгоритма - python - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь написать жадный алгоритм, и у меня есть список кортежей:

cow_list = [(«Бетси», 9), («Генриетта», 9), («Герман», 7), («Орео», 6), («Милли», 5), («Мэгги») , 3), («Му Му», 3), («Молочный коктейль», 2), («Лола», 2), («Флоренция», 2)]

Я пытаюсь перебрать список:

def greedy_cow_transport(cow_list, maxWeight):
transport_name = []
taken_transport = []
not_taken = []
transport_weight = []
for i in range(len(cow_list)):
    total_weight = sum(transport_weight)
    if (total_weight+cow_list[i][1]) <= maxWeight:
        transport_name.append(cow_list[i][0])
        transport_weight.append(cow_list[i][1])
        total_weight += cow_list[i][1]
    elif (total_weight+cow_list[i][1]) > maxWeight:
        taken_transport.append(cow_list[i][0])            

И я пытаюсь удалить первый кортеж в списке, если> maxWeight, чтобы цикл for мог начать процесс заново без использования этого первого кортежа.

Итак, я хочу, чтобы конечный результат был:

transport_name = [['Betsy'], ['Henrietta'], ['Herman', 'Maggie'], ['Herman', 'Moo Moo'], ['Herman', 'Milkshake'] и т. Д. . со всеми комбинациями, где сумма значений <10. </p>

Пожалуйста, дайте мне знать, если мой вопрос не имеет смысла.

1 Ответ

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

Очень специальный подход,

def greedy_cow_transport(cow_list, maxWeight):
    transport_name = []
    taken_transport = []
    not_taken = []
    transport_weight = []
    for i in range(len(cow_list)):
        # Store an initial element
        temp_name.append(cow_list[i][0])
        temp_weight.append(cow_list[i][1])
        total_weight = sum(temp_weight)

        # Iterate on all the elements to the right
        for j in range(i, len(cow_list)):
            if (total_weight + cow_list[j][1])<= maxWeight:
                temp_name.append(cow_list[j][0])
                temp_weight.append(cow_list[j][1])
                total_weight = sum(temp_weight)
            else:
                taken_temp_transport.append(cow_list[j][0])

        transport_name.append(temp_name)
        transport_weight.append(temp_weight)
        taken_transport.append(taken_temp_transport)
...