2011-12-15 46 views
1

我有一個字符串'RTKLOANGMSTTTS'和元組列表[(2,5),(8,9)],它返回一個字符串,其中包含字母2-5和8- 9包括在內,即'TKLOGM'。 我的想法是這樣的:找到字符串中的列表的元素

def f(string, lst): 
    for element in lst: 
     if element in string: 
      print string 

但它不會返回任何東西?

+0

所以,你要切片,在列表中的元組字符串?如果這就是你需要的東西,那麼在python中很容易。 – Matt 2011-12-15 08:27:18

回答

4

試試這個:

def f(source, lst): 
    return "".join(source[start - 1:end] for start, end in lst) 

這是什麼會做的是遍歷lst,在每個迭代上提取解析成startend。然後它會創建一個新的字符串作爲source字符串的一個片段,從start - 1end(我們使用start - 1,因爲您顯示1表示第一個字符,但python使用0-索引,因此我們必須減去一個)。最後,我們使用"".join()加入所有字符串。

如果您使用Python的舊版本不支持發電機的語法,而不是使用:

def f(source, lst): 
    return "".join([source[start - 1:end] for start, end in lst]) 

它的工作原理完全一樣,但不是與發電機的工作它明確創建一個列表它被加入。

+0

這將不會給出OP所需的答案,你將擁有`KLOAMS`,而不是`TKLOGM` .... – 2011-12-15 08:30:38

0

我認爲這是你要求的。我現在不能測試,但嘗試:

def f(string, lst): 
    getStr = '' 
    for t in lst: 
     begin, end = t 
     getStr += string[begin-1:end] 
    return getStr 
2
>>> x = 'RTKLOANGMSTTTS' 
>>> l = [(2,5),(8,9)] 
>>> ''.join(x[s-1:e] for (s,e) in l) 
'TKLOGM' 
0
def f(string, lst): 
    for start, end in lst: 
     s = string[start-1:end] 
     if s: 
      yield s 

for s in f('RTKLOANGMSTTTS', [(2,5),(8,9)]): 
    print s 
相關問題