Python编程背包列表索引

2024-03-29 07:34:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个简单的贪婪背包问题。我的代码是功能性的,但依赖于列表中某些元素的正确顺序;更具体地说,当一个元素是列表中的最高值并且位于列表的开始位置时,该元素将被附加到最终返回的列表中,然后从初始列表中删除-我面临的问题是元素及其索引的自然移动会影响下一次迭代

下面是我的代码和一个示例调用

def expensive_thief(weights, values, capacity):
    returned_knapsack = []
    weight_count = 0

    value_list = list(values)
    weight_list = list(weights)

    while weight_count < capacity:
        best_value = max(values)
        i = values.index(best_value)
        if weights[i] <= capacity - weight_count:
            returned_knapsack.append(i)
            weight_count = weight_count + weights[i]
        del values[i]
        del weights [i]

    return returned_knapsack
print(expensive_thief([4,9,1,5,1], [5,10,9,8,4], 10))

应返回并打印[1,2],因为这些是具有最高值的项目的索引,也构成了最大容量

在我的代码中,初始值最高的元素(权重为9、值为10的元素1被添加到最终列表中并被删除,删除此元素会移动每个其他元素的索引,要添加的下一个元素(即正确的元素或索引2中的原始元素)在索引1处被引用)

我理解索引和引用,但似乎无法解决问题。请帮忙


Tags: 代码元素列表valuecountlistbestcapacity