[英]How to sum items from largest value to smallest (python)
我正在尝试编写一个程序,它将列表中的项目从最大到最小,直到某个值。 (这是一个关于“背包问题”的练习)。 我想出这个来找到列表中价值最大的项目,然后将其添加到变量pt
和vt
:
knapsack = []
l1 = [300.0, 400.0, 600.0, 1300.0, 2000.0]
l2 = [100.0, 400.0, 300.0, 700.0, 2000.0]
l3 = [0.3333333333333333, 1.0, 0.5, 0.5384615384615384, 1.0]
while pt <= c:
for i in range(len(l3):
if i not in knapsack:
if l3[i] > m:
m = l3[i]
v = l2[i]
p = l1[i]
knapsack.append(i)
if l3[i] == m and l1[i] < p:
m = l3[i]
v = l2[i]
p = l1[i]
knapsack.append(i)
i += 1
i = 0
pt += p
vt += v
但是,我无法让for
循环跳过之前找到的最大值,因此它在每次迭代中都为pt
和vt
添加了 400。 我尝试解决将 i 值添加到knapsack
列表但它不起作用的问题。
OBS:目标是将具有最大值l1
与重量l2
比率的值添加到背包中,为此我创建了第三个列表l3
。 如果比率相同,则打破平局的标准是重量最小的项目,这就是.sort()
function 不起作用的原因——每个值在其他列表中都有 2 个对应值。
这是一个解决方案:
# the input lists
l1 = [300.0, 400.0, 600.0, 1300.0, 2000.0]
l2 = [100.0, 400.0, 300.0, 700.0, 2000.0]
# the result list
l3 = [l2[i]/l1[i] for i in range(len(l1)) ]
# the sorted list (highest to lowest)
reversed_sorted = sorted(l3, reverse=True)
# some value to be used as a limit
some_value = 3
the_total=0 # value to keep adding
for i in reversed_sorted:
if the_total + i > some_value:
# if go above value then exit
break
else:
the_total = the_total + i
# otherwise add next item
# print result
print(the_total)
请注意,最终循环 cna 被压缩为list comprehension
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.