【问题标题】:Removing a Tuple from a list of tuples while iterating a greedy algorithm - python在迭代贪心算法时从元组列表中删除元组 - python
【发布时间】:2018-09-05 17:25:03
【问题描述】:

我正在尝试编写一个贪心算法并且我有一个元组列表:

cow_list = [('Betsy', 9), ('Henrietta', 9), ('Herman', 7), ('Oreo', 6), ('Millie', 5), ('Maggie' , 3), ('Moo Moo', 3), ('Milkshake', 2), ('Lola', 2), ('Florence', 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])            

我想要做的是删除列表中的第一个元组 if > maxWeight 以便 for 循环可以在不使用第一个元组的情况下重新开始该过程。

所以我希望最终结果是:

transport_name = [['Betsy'], ['Henrietta'], ['Herman', 'Maggie'], ['Herman', 'Moo Moo'], ['Herman', 'Milkshake'] 等. 与所有组合,其中值的总和为

如果我的问题没有意义,请告诉我。

【问题讨论】:

  • 如果 > 最大重量?以及要从哪个列表中删除,它的名称是什么?我认为你需要 while 循环。
  • 如果total_weight > maxWeight,我想删除cow_list 中的第一个元组,这样循环就可以继续寻找total_weight
  • 非常感谢!我没有评论所需的 20 名声望,但我真的非常感谢您的帮助!!!
  • 我需要讨论才能正确回答,但我希望你有一些我认为的想法......你可以使用 pop() 或切片列表 [1:] 就像我在聊天中向你展示的那样房间...并改用while循环..

标签: python list tuples


【解决方案1】:

一种非常临时的方法,

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2017-09-21
    相关资源
    最近更新 更多