2017-02-21 58 views
0

我會盡量像can一樣解釋。創建一個總和達到給定限制的int列表的所有可能的子列表

lst = [7.1, 6.3, 5.6, 3.7]. 

我想要所有不同的組合,適合50內沒有射過它。

lst1 = [7.1, 7.1, 7.1, 7.1, 7.1, 7.1, 7.1] 
print sum(lst1) 

會給49.7。 列表像lst2 =[7.1,7.1,7.1 5.6, 5.6, 5.6, 3.7, 3.7, 3.7]也必須在那裏。 所有不同的組合必須進入列表,將檢查他們的總和以儘可能接近目標範圍。我真的不知道該怎麼做,我也找不到類似的東西。 總之

  1. 如何迭代這些數字?
  2. 如何將這些數字添加到列表中?
  3. 如何找到最佳組合?

回答

0

你可以使用迭代工具庫您的問題:

from itertools import combinations_with_replacement as cwr 
l1 = [1,2,3,4] 
l2 = [] 

for i in range(0, 20): 
    for j in list(cwr(l1,i)): 
     if sum(j) < 20: 
      l2.append(j) 
print l2 
+0

謝謝您將itertools引入我的注意。我不是很瞭解所有可用於Python的圖書館。在你的幫助下,我做了一些改變,現在我已經有了這些組合,我可以將它們全部放入單獨的列表中以供進一步使用。 – Sakipgr

0
from itertools import combinations_with_replacement as cwr 
l1 = [7.1,6.3,5.6] 
num = 0 
l2 = [] 
l3 = [] 

for i in range(0, 20): 
    for j in list(cwr(l1,i)): 
     if 19 < sum(j) < 20: 
      l2.append(j) 
     elif 18 < sum(j) < 19: 
      l3.append(j) 
     else: 
      pass 

for i in range(len(l2)): 
    lst = "List_" + str(num) 
    num += 1 
    lst = [] 
    lst.append(l2.pop()) 
    lst.sort() 
    lst.reverse() 
    print lst 

是否有您能給我任何提示我的解決方案?

相關問題