Python根据元组值删除元组

时间:2013-10-21 22:45:36

标签: python sorting tuples

我想返回元组,使它们的重量加起来达到400,但也不应该重复上课。

因此,下面的最佳解决方案是(项目,重量<400,最大值,没有重复等级,所以1a,1e,1g,1b)

#mytuple = (item, weight, value, class)
mytuple= (('map', 9, 150, 'a'), ('compass', 13, 35, 'a'), ('water', 153, 200, 'a'), ('sandwich', 50, 160, 'a'), ('glucose', 15, 60, 'e'), ('banana', 27, 60, 'g'), ('suntan cream', 11, 70, 'a'), ('waterproof trousers', 42, 70, 'e'), ('waterproof overclothes', 43, 75, 'a'), ('note-case', 22, 80, 'a'), ('sunglasses', 7, 20, 'b'), ('socks', 4, 50, 'a'))

2 个答案:

答案 0 :(得分:1)

您可能需要考虑使用setdictionary(以类作为键),而不是元组的元组。他们更容易操纵。

问题本身就是背包问题,这是一个经典的计算机科学,并在互联网上详尽记录。

最简单(但通常不准确)的解决方案是贪婪的算法,但由于这几乎肯定是一个家庭作业问题,您需要动态编程解决方案 - 因为这是动态编程的规范性介绍。 This is a pretty good overview,带有可读的伪代码和漂亮的表格。

答案 1 :(得分:0)

以下是从列表中删除元素的方法:

>>> a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a.pop()  #remove & return the right-most element
3
>>> a
[1, 2]
>>> a.pop(0) #remove & return element at given index
1
>>> a
[2]

至于你的问题,它是bin packing problem的一个变体,它是NP难的。