[英]I have a 3d list of strings and numbers. I need to calculate the sum of each string and then percent in python
[英]i have a list of numbers and a certain sum, and i need to calculate the possible number of ways to generate that sum
另外,允许重复数字。
我参考了该程序:
def subset_sum_recursive(numbers,target,partial):
s = sum(partial)
#check if the partial sum is equals to target
if s == target:
print "sum(%s)=%s"%(partial,target)
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
subset_sum_recursive(remaining,target,partial + [n])
def subset_sum(numbers,target):
#we need an intermediate function to start the recursion.
#the recursion start with an empty list as partial solution.
subset_sum_recursive(numbers,target,list())
if __name__ == "__main__":
subset_sum([3,9,8,4,5,7,10],15)
#Outputs:
#sum([3, 8, 4])=15
#sum([3, 5, 7])=15
#sum([8, 7])=15
#sum([5, 10])=15
但是我没有把count变量放到哪里,它是如此令人困惑
看来您有一个典型的点钞问题。
您在此处看到的所有代码片段都应解决您要解决的问题(还包括重复使用相同编号的组合)。 我发现该Wiki上的这个python版本很方便(如果很慢):
def changes(amount, coins):
ways = [0] * (amount + 1)
ways[0] = 1
for coin in coins:
for j in xrange(coin, amount + 1):
ways[j] += ways[j - coin]
return ways[amount]
print changes(100, [1, 5, 10, 25])
print changes(100000, [1, 5, 10, 25, 50, 100])
如果您想了解更多,请参考先前对类似问题的回答-它可以分解问题的可能变体,并提供一个不错的解决方案。
上师可能不知道解决这个问题的规范方法。 但是我发现我的解决方案很好:
import itertools
inp = [3,9,8,4,5,7,10]
outp = list()
target = 15
for x in range(2,len(inp)):
outp.extend([ tsum for tsum in itertools.combinations(inp,x) if sum(tsum) == target ])
outp
UPD对于少量输入而言,这是非常令人满意的。 对于较大的输入,它的伸缩性不是很好。 – @gnibbler如果输入量很大,请考虑阅读此问题
您也可以在找到一个解决方案时在main中定义一个列表,并在列表中追加一个:
if s == target:
print "sum(%s)=%s"%(partial,target)
solutions.append("sum(%s)=%s"%(partial,target))
if __name__ == "__main__":
solutions=[]
subset_sum([3,9,8,4,5,7,10],15)
print len(solutions) # output: 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.