繁体   English   中英

Python根据元组值删除元组

[英]Python remove tuples based on tuple values

我想返回元组,以便它们的总和达到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'))

您可能要考虑使用集合字典 (以类为键),而不是元组的元组。 它们更容易操作。

问题本身就是背包问题,这是计算机科学的经典作品,在互联网上都有详尽的记载。

最简单(但通常不准确)的解决方案是贪婪算法,但是由于这几乎肯定是家庭作业问题,因此您需要动态编程解决方案-因为这是对动态编程的规范介绍。 这是一个很好的概述 ,具有可读的伪代码和漂亮的表。

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

>>> 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]

至于您的问题,这是装箱问题的一种变体,并且是NP难题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM