Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,在字典中查找与规则匹配的组件_Python_List_Dictionary_Sum - Fatal编程技术网

Python,在字典中查找与规则匹配的组件

Python,在字典中查找与规则匹配的组件,python,list,dictionary,sum,Python,List,Dictionary,Sum,我有一本python字典,看起来像这样: dict = { '1': 0.002, '2': 0.211, '3': 0.574 .....(a lot of values) } 我正在寻找一个好方法来找出哪些数字和等于一个特定的数字 此外,我还想添加一个功能,即选择要计算多少个数字 例如,如果我输入(“0.213”,2),函数将返回'1',2',您将不得不通过所有可能的组合使用蛮力。是为了: import itertools for comb in itertools.combination

我有一本python字典,看起来像这样:

dict = { '1': 0.002, '2': 0.211, '3': 0.574 .....(a lot of values) }
我正在寻找一个好方法来找出哪些数字和等于一个特定的数字

此外,我还想添加一个功能,即选择要计算多少个数字


例如,如果我输入
(“0.213”,2)
,函数将返回
'1',2'

,您将不得不通过所有可能的组合使用蛮力。是为了:

import itertools
for comb in itertools.combinations(d.keys(), r):
    if sum(d[k] for k in comb) == target:
        return comb  # or add to a result list, if you want them all
其中
d
是您的字典,
r
是要选择的值的数量,
target
是目标值


虽然在比较浮动时使用
==
可能不是一个好主意。请自行决定使用。

您是否有关于这些值的更多信息?如果两个任意值之和为其他任意值,则只能通过每两个值求和来检查其和是否与搜索值匹配。一般问题(对于任意数量的求和)被称为和是NP-完全的。是否有多个组合可以产生0.213的和?我将提供更多的信息。共有50个值,其中6个值需要与函数返回的特定和匹配。它总是50个值和其中6个需要匹配的相同总和(但值本身会发生变化)可能有很多组合匹配该总和。50选择6是15890700个6个数字的总和。这是可行的,但Python可能需要几秒钟甚至更长的时间(特别是如果您想将所有可能的子集存储为元组,这可能会占用大量内存,而且速度会很慢)。我相信它可以通过动态规划来优化,但是,通过重用较小的数字子集的和来快速计算包含这些子集的较大子集的和。我认为他不必强迫它,但是的,这是一种方法。动态规划可以通过只计算一次子集的子集和来优化这一点。对于一组50个数字,对于大小为6的子集,最好使用
yield
关键字将其作为生成器函数。