[英]Number combinations in Python (coin change variation)
我正在嘗試從提供的值列表中獲取所有可能的唯一組合的列表,這些值的總和導致還提供的目標值。 我是一個初學者,並且已經看過一些關於硬幣找零問題的內容,但是,這有些不同,因為我並沒有試圖獲得最少的元素數量。 我嘗試了很多方法,因為遞歸對我來說非常新而且很難,我想出了這段代碼,在我增加遞歸限制后停止給我一個遞歸錯誤,但它每次只給出一個組合
from random import choice as pick
import sys
sys.setrecursionlimit(5000)
def find_combinations(elements, target, partial=None, results=None):
if results is None:
results = []
if partial is None:
partial = []
if len(results) == 2:
return results
else:
rand_num = pick(elements)
if partial.count(rand_num) < elements.count(rand_num):
partial.append(rand_num)
total = sum(partial)
if total == target:
if partial not in results:
results.append(partial)
print(results)
partial.clear()
find_combinations(elements, target, partial, results)
elif total > target:
partial.clear()
find_combinations(elements, target, partial, results)
elif total < target:
find_combinations(elements, target, partial, results)
如您所見, len 是任意的。 我似乎無法擺脫遞歸。任何解決方案都會受到贊賞:)
import itertools
stuff = [1, 2, 3]
Target = 3
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
if sum(subset) == Target:
print(subset)
您可以使用itertools
循環遍歷每個組合,如果該子集的總和等於您在此處執行的任何操作的目標,我將其打印出來,即 output:
(3,)
(1, 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.