Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_List_Arraylist - Fatal编程技术网

在python列表中查找计算值

在python列表中查找计算值,python,arrays,list,arraylist,Python,Arrays,List,Arraylist,我有这样一个python列表 [100, 150, 30, 50, 10, 20, 40] 然后我想在上面的列表中找到90(是的,当然不在其中),但我的预期结果是: [50, 40] 或 在python或其他编程语言中如何实现这一点?您可以使用列表理解来迭代列表元素的所有组合,这些组合和您的目标值相加 >>> from itertools import combinations >>> data = [100, 150, 30, 50, 10, 20, 4

我有这样一个python列表

[100, 150, 30, 50, 10, 20, 40]
然后我想在上面的列表中找到90(是的,当然不在其中),但我的预期结果是:

[50, 40]


在python或其他编程语言中如何实现这一点?

您可以使用列表理解来迭代列表元素的所有组合,这些组合和您的目标值相加

>>> from itertools import combinations
>>> data = [100, 150, 30, 50, 10, 20, 40]
>>> target = 90
>>> [comb for n in range(1, len(data)+1) for comb in combinations(data, n) if sum(comb) == target]
[(50, 40), (30, 50, 10), (30, 20, 40)]

为此,您需要检查每个数字组合。例如:


取100并检查其是否小于90,如果是,则每隔小于90的一个数字检查一次,看看它们是否相加到90,但是,如果两个数字相加到小于90,则检查其他数字是否再次相加到90。

尝试使用列表理解和
设置:

>>> set([x for x in lst for y in lst if x+y == 90 and x != y])
{40, 50}

你能把问题说清楚一点吗?特别是你想要的结果是:你想在你的列表中找到任何可能的组合,还是想找到一个元素可能最大的组合,等等?@IvoVidovic我只需要找到一个结果,而不是所有可能的组合,因为如果我在列表中的值超过100,它就太大了。到目前为止,这是最好的答案,但若列表中的值超过100,那个么这似乎是个问题。循环组合会很重。
>>> set([x for x in lst for y in lst if x+y == 90 and x != y])
{40, 50}