在python列表中查找计算值
我有这样一个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
[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}