【发布时间】:2024-05-23 00:50:02
【问题描述】:
我想编写一个接受列表和数字作为参数的函数。它将返回与该数字相加的项目列表。
例如func([1,2,3,4,5],7) 应该返回[5,2]。但是程序现在只返回[5]。
这是算法的简化版本,我将作为更大项目的一部分使用,原始版本将有更多条件,但如果可行,我可以在此基础上构建,因此我是暂时忽略会破坏程序的事情,例如没有元素相加等。
def func(R,t):
tog = t
appr = 0
rlist = []
while True:
if appr >= tog:
break
diff = [t-i for i in R]
for i,v in enumerate(diff):
if v == min(diff):
rlist.append(R[i])
appr += R[i]
t -= R[i]
R.remove(R[i])
break
return rlist
这个想法是,无论哪个元素(来自列表 R)与目标 (t) 的差异最小,都将添加到 rlist,并且该值将从作为参数发送的列表中删除。当达到目标值时,主循环中断。
我们将不胜感激解释为什么会发生这种情况以及如何解决它。
编辑 - diff [abs(tog - i) for i in R] 有效。
【问题讨论】:
-
您的示例中是否还应包含 3 和 4? 1 + 2 + 4 怎么样?应该包括这 3 个数字,还是您只是对成对感兴趣?
-
@mhawke ,我想要最少数量的项目,所以 5,2 考虑到我的算法是这样编写的,它会首先选择 5,因为它最接近 7
标签: python-3.x algorithm loops