2014-02-09 85 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')