2014-02-09 122 views
1

我想根據時間分割一個python字符串。基於變量的python劃分列表

我有與它們相關聯的時間幾個變量:

因子1 = 10分鐘

因子2 =2分鐘

因子3 =8分鐘

因子4 =20分鐘

因子5 = 7分鐘

我希望能夠根據時間要求python將這些因素分解爲2個子字符串。比如我只只有19分鐘,我想Python來我的字符串分爲:

串1 = [「因子」,「因子2」,「5倍」]

串2將不得不在其餘因素。

我希望能夠給python一個時間,併爲它吐出一個最接近這個時間的字符串。

任何幫助非常感謝。

+1

它是一個動態規劃問題。谷歌爲硬幣更改動態編程。 – thefourtheye

+0

它看起來像揹包問題,儘管很難說。對那些理解這種意圖的人做得很好,因爲我完全誤解了,所以我刪除了我的答案。 –

回答

2

確定此代碼只寫了,你可以試試看:

我想你使用變量這樣的:

factors = {"factor 1" : "10 minutes", 
"factor 2" : "2 minutes", 
"factor 3" : "8 minutes", 
"factor 4" : "20 minutes", 
"factor 5" : "7 minutes" 
} 

wantedTime = 19; 
String_1={} 
String_2={} 
total = 0 
for k,v in factors.items():## or factors.iteritems() 
    time = int(v.split(" ")[0]) 
    if total+time <= wantedTime: 
     total +=time 
     String_1[k]=v 
    else: 
     String_2[k]=v 
+0

完美!謝謝! – AB567

+1

這不會按原樣運行。你需要'for k,v in factors.items()' –

+0

@JamieBull,我忘記了,謝謝;) – ImadOS

2

看起來你想要的的時間之和等於組合到19.你可能想看看itertools

import itertools 
factor_list=['factor 1 = 10 minutes', 
    'factor 2 = 2 minutes', 
    'factor 3 = 8 minutes', 
    'factor 4 = 20 minutes', 
    'factor 5 = 7 minutes'] 
resultlist=[] 
for r in range(len(factor_list)): 
    for factor in itertools.combinations(factor_list, r): 
     if sum([int(item[item.index('=')+2:item.index(' minutes')]) for item in factor])==19: 
      print factor 

('factor 1 = 10 minutes', 'factor 2 = 2 minutes', 'factor 5 = 7 minutes')