我有一个很大的数字,包括负数,第二位的小数。例如,(10348.94, -984.23, 9429.92)
。我想从一个列表中的一个数求一个数的和。列表中的数字也可以重复,给定的和可以是负数
这是我到目前为止得到的结果,重复和小数似乎起作用,但当我尝试在列表和给定的总和中都做负数时,它就不起作用了
def Find(goal, VarienceNum):
variance = [[Listed] for Listed in VarienceNum]
newList = []
result = []
while variance:
for holder in variance:
s = sum(holder)
for Listed in VarienceNum:
if Listed >= holder[-1]:
if s + Listed < goal:
newList.append(holder + [Listed])
elif s + Listed == goal:
result.append(holder + [Listed])
variance = newList
newList = []
return result
goal=float(input("please enter your goal: "))
VarienceNum=list(map(float,input("please enter the list: ").split()))
print(Find(goal,VarienceNum))
获取列表的所有子集,检查每个子集的总和,当该总和最终与目标值匹配时,返回该子集
这里最困难的部分是获取列表中所有可能的子集。获取所有子集需要为列表中的每个项目选择“包含”或“排除”(每个元素2个选项导致
2^n
个可能的选择,以及2^n
个可能的子集)为了列举所有这些选择,我使用了一个名为
pick
的简单数组,它由布尔值组成;源数组中的每个值对应一个布尔值。每个布尔值表示源数组中对应值的包含/排除选项。数组开始时只有0
,表示为每个项选择“排除”。然后使用名为inc_bool_array
的函数将pick
更新为下一组值。这意味着pick将随着时间的推移采用以下值:逐渐地
0
和1
的每一种可能的组合都会发生。然后pick
用于生成仅包含与1
相对应的值的子集,只需使用带有if
条件的生成器即可:相关问题 更多 >
编程相关推荐