有没有办法从一个整数列表中获取一个新的整数列表,这些整数加起来等于某个值?

问题描述

我有一个整数列表,它们是随机排序的,并且可能重复:CREATE or REPLACE FUNCTION public.tf_test() RETURNS trigger NOT LEAKPROOF AS $BODY$ DECLARE targetid orderpayment.id%TYPE; BEGIN INSERT INTO orderpayment(currencycode,tableorderid,payment,tip,paymentprocessor) VALUES (NEW.currency,NEW.orderid,NEW.amount,NEW.tip,1) RETURNING id INTO targetid; NEW.orderpayment = targetid; RETURN NEW; END; $BODY$ LANGUAGE plpgsql; 和某个值(例如:mylist = [5,4,2,5,6,7,3,8,3]

现在,我想从value=35中获取一个整数列表,我们将其命名为mylist,其中包括所有可能的数字选项,这些数字加起来为sumlist

这样我就可以这样做:

value

sum=0 for i in sumlist[0]: sum+=i 将返回sum == value

解决方法

Itertools.combinations非常容易管理。当您为其提供列表和长度时,它将提供该长度的所有可能组合,并且与排列不同,它将删除重复项。为了确保尝试每个选项,必须尝试每个长度(从0到完整字符串),如下所示:

import itertools
def SumList(MyList,Value):
    for Length in range(1,len(MyList)):          
        for ListOfVals in itertools.combinations(MyList,Length): 
            Total=0
            for num in ListOfVals:
                Total+=num
            if Total==Value:
                
                return(ListOfVals)
                
mylist=[5,4,2,5,6,7,3,8,3]
value=35
print(SumList(mylist,value))



>>[5,8]

作为一个简短的注解,它总是输出最短的组合,因为它会迭代从最短到最长的长度。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...