2011-12-15 11 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

答えて

4

このお試しください:これは何をするか

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

は反復ごとにstartendにタプルを抽出し、lstを反復されます。 からendまでのsource文字列のスライスとして新しい文字列を作成します(1は最初の文字を意味するので、Pythonは0インデックスを使用するので、1を引く必要があります)。最後に、"".join()を使用してすべての文字列を結合します。あなたは発電機の構文をサポートしていないのPythonの古いバージョンを使用している場合

、代わりにこれを使用する:

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

それはまったく同じ動作しますが、代わりに発電機での作業で、それが明示的にリストを作成参加する。

+0

OPで必要とされる答えが得られないなら、あなたは 'TKLOGM'ではなく' KLOAMS'を持っています.... –

+0

@CédricJulien:私はOPがうまくいき、0-索引付けを使用していると思った。私はこれを解決します。 – orlp

+0

これは動作しません。私はエラーを受け取ります: TypeError: '関数'オブジェクトは反復不可能です –

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 
関連する問題