gpt4 book ai didi

python - 查找列表中的哪个数字总和为某个数字但带有负数和小数

转载 作者:行者123 更新时间:2023-12-04 07:43:06 29 4
gpt4 key购买 nike

我有一个相当大的列出数字,其中包括负数,第二位的十进制数字。例如,(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))
here's the output

最佳答案

获取列表的所有子集,检查每个子集的总和,当该总和最终与目标值匹配时,返回该子集!

def inc_bool_array(arr, ind=0):

if (ind >= len(arr)): return;

if (arr[ind] == 0):
arr[ind] = 1;
else:
arr[ind] = 0;
inc_bool_array(arr, ind + 1);

def find_subset_sum(target, arr):

size = len(arr);
pick = [ 0 for n in arr ];
num_subsets = 2 ** size;

'''
Loop through every possible subset until we find one such that
`sum(subset) == target`
'''
for n in range(num_subsets):

''' Subset is determined by the current boolean values in `pick` '''
subset = [ arr[ind] for ind in range(size) if pick[ind] == 1 ];

if sum(subset) == target: return subset;

''' Update `pick` to the next set of booleans '''
inc_bool_array(pick);

return None;

print(find_subset_sum(3, [ 1, 2, 3 ]));
print(find_subset_sum(5, [ 1, 2, 3 ]));
print(find_subset_sum(6, [ 1, 2, 3 ]));
print(find_subset_sum(7, [ 1, 2, 3 ]));

print(find_subset_sum(3, [ -1, 5, 8 ]));
print(find_subset_sum(4, [ -1, 5, 8 ]));
print(find_subset_sum(5, [ -1, 5, 8 ]));
print(find_subset_sum(6, [ -1, 5, 8 ]));
print(find_subset_sum(7, [ -1, 5, 8 ]));
print(find_subset_sum(8, [ -1, 5, 8 ]));
print(find_subset_sum(12, [ -1, 5, 8 ]));
print(find_subset_sum(13, [ -1, 5, 8 ]));
这里的困难部分是获取列表的所有可能子集。获取所有子集是为列表中的每个项目选择“包含”或“排除”的问题(每个元素 2 个选项导致 2^n 可能的选择和 2^n 可能的子集)。
为了列举所有这些选择,我使用了一个名为 pick 的简单数组。它由 bool 值组成;源数组中的每个值都有一个 bool 值。每个 bool 值代表源数组中其对应值的包含/排除选项。阵列开始时只有 0 ,代表每个项目的“排除”选择。然后是一个名为 inc_bool_array 的函数用于更新 pick到下一组值。这意味着随着时间的推移,pick 将采用这些值:
Step 1: [ 0, 0, 0, 0, 0, ... ]
Step 2: [ 1, 0, 0, 0, 0, ... ]
Step 3: [ 0, 1, 0, 0, 0, ... ]
Step 4: [ 1, 1, 0, 0, 0, ... ]
Step 5: [ 0, 0, 1, 0, 0, ... ]
Step 6: [ 1, 0, 1, 0, 0, ... ]
Step 7: [ 0, 1, 1, 0, 0, ... ]
Step 8: [ 1, 1, 1, 0, 0, ... ]
Step 9: [ 0, 0, 0, 1, 0, ... ]
.
.
.
逐渐每一种可能的组合 0 s 和 1 s 会发生。然后 pick用于生成仅包含对应于 1 的值的子集,只需使用带有 if 的生成器健康)状况:
subset = [ arr[ind] for ind in range(len(arr)) if pick[ind] == 1 ]

关于python - 查找列表中的哪个数字总和为某个数字但带有负数和小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67352324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com