【发布时间】:2023-01-13 02:03:34
【问题描述】:
我有一个很大的整数数组(~3k 项),我想找到每个数字组合的索引,其中所述数字的总和等于 X。如何在程序不花费数年时间执行的情况下执行此操作?
我可以使用以下 Python 代码找到第一个可能的组合:
def find_numbers_that_sum_to(source_arr, target_number, return_index=True):
result = []
result_indices = []
for idx, item in enumerate(source_arr):
sum_list = sum(result)
assert (sum_list + item) <= target_number
result.append(item)
result_indices.append(idx)
if (sum_list + item) == target_number:
break
return result_indices
但我需要每一种可能的组合。至少是一种动态生成它们的方法。我一次只需要其中一个,但如果它给我的索引不符合我需要的另一个标准,我将需要下一组。
【问题讨论】:
-
一个快速的建议是您可以
yield而不是返回列表。这将允许该函数产生一个结果,您可以根据您的标准对其进行评估,并仅在需要时才要求另一个结果。 -
出色地每一种可能的组合3000 个整数需要一段时间才能列出。如您所知,除非对此有一些限制,否则将需要数年时间才能执行。
标签: python arrays numpy math numpy-ndarray