2017-10-10 26 views
-2

我有兩個列表:如何添加相同的元素N次?

list1 = [1,2,6] 
list2 = [] 

,我有一個數:N

我如何可以追加列表1到列表2的號碼,這樣的列表2的總和等於N.

例:

n = 10 
list2 = [2,2,6] 

我無法找到一個方法來添加2直到總和等於10

+1

聽起來像是一個動態編程問題 –

+1

當你無法達到N的值時會發生什麼? –

+0

[子集和算法在集合中重複數字]的可能副本(https://stackoverflow.com/questions/11929938/subset-sum-algorithm-with-repetition-of-numbers-in-the-set) –

回答

0

這可能會實現:

list1 = [1,2,6] 
list2 = [] 
n = 10 

list1 = sorted(list1, reverse=True) # sort list descending order 

for i in list1:      # for each item in list1 
    list2.append(i)     # add the item to list2 
    while not sum(list2) > n:  # while sum of list2 is less than n 
     list2.append(i)    # keep adding the same element 
    if sum(list2) > n:    # if sum of list2 is more than n 
     list2.pop()     # remove the last element added 

list2.sort() # sort list ascending order 
print(list2) # [2, 2, 6] 

工程爲給定的list1

可能需要測試不同長度和數量的list1

+0

哇,真是太棒了,它正在工作。我曾試圖做類似的事情,但相反「而不是sum(list2)> n:」,我試着「while sum(list2)<= n:」,但由於某種原因它不工作:( 真的很感謝人 – taynan

+0

是啊,你可以做同樣的「while sum(list2)<= n:」並改變一些其他的東西,很高興提供幫助,如果你覺得這回答了你的問題,請考慮upvoting或接受它,謝謝 – davedwards

+0

reverse這份名單確實是一個好主意OO – taynan

相關問題