python - 如何将项目从最大值到最小值(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
400 vt
。我尝试解决将 i 值添加到knapsack
列表中的问题,但它不起作用。
OBS:目标是将具有最大价值l1
重量l2
比的价值添加到背包中,为此我创建了第三个列表l3
。如果比率相同,则打破平局的标准是权重最小的项目,这就是该.sort()
功能不起作用的原因——每个值在其他列表中都有 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
.
推荐阅读
- javascript - 模板文字中的对象与外部
- excel - 如何从excel vba上的多表中获取每个范围的值
- asp.net - 如何从反应中调用存储过程
- c++ - 如何使用 Gstreamer 和 C++ 将 Open CV 帧写入 RTSP 流?
- java - 将maven项目构建版本放入mdc
- file - 无法列出下载文件的目录
- wxpython - 如何在 linux 中使用 python3 安装 wxpython?,给我错误
- java - 如何在 Firebase Firestore 中连接的 RecyclerView 中添加搜索过滤器视图?
- sql - 从范围表中选择范围
- xamarin - Xamarin Forms:如何将访问令牌传递给 WebView