文字列「RTKLOANGMSTTTS」とタプルのリスト[(2,5)、(8,9)]があり、文字2-5と8- 9は両方とも、それは 'TKLOGM'です。文字列内のリストの要素を見つける
def f(string, lst):
for element in lst:
if element in string:
print string
しかし、それは何も返しませんが: 私のようなものを考えていましたか?
文字列「RTKLOANGMSTTTS」とタプルのリスト[(2,5)、(8,9)]があり、文字2-5と8- 9は両方とも、それは 'TKLOGM'です。文字列内のリストの要素を見つける
def f(string, lst):
for element in lst:
if element in string:
print string
しかし、それは何も返しませんが: 私のようなものを考えていましたか?
このお試しください:これは何をするか
def f(source, lst):
return "".join(source[start - 1:end] for start, end in lst)
は反復ごとにstart
とend
にタプルを抽出し、lst
を反復されます。 からend
までのsource
文字列のスライスとして新しい文字列を作成します(1は最初の文字を意味するので、Pythonは0インデックスを使用するので、1を引く必要があります)。最後に、"".join()
を使用してすべての文字列を結合します。あなたは発電機の構文をサポートしていないのPythonの古いバージョンを使用している場合
、代わりにこれを使用する:
def f(source, lst):
return "".join([source[start - 1:end] for start, end in lst])
それはまったく同じ動作しますが、代わりに発電機での作業で、それが明示的にリストを作成参加する。
OPで必要とされる答えが得られないなら、あなたは 'TKLOGM'ではなく' KLOAMS'を持っています.... –
@CédricJulien:私はOPがうまくいき、0-索引付けを使用していると思った。私はこれを解決します。 – orlp
これは動作しません。私はエラーを受け取ります: TypeError: '関数'オブジェクトは反復不可能です –
私はこれがあなたが求めていると思います。私は今テストするが、試すことができません。
def f(string, lst):
getStr = ''
for t in lst:
begin, end = t
getStr += string[begin-1:end]
return getStr
>>> x = 'RTKLOANGMSTTTS'
>>> l = [(2,5),(8,9)]
>>> ''.join(x[s-1:e] for (s,e) in l)
'TKLOGM'
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
だから、あなたは、リスト内のタプルの文字列をスライスしたいですか?あなたが必要とするものなら、それはPythonでかなり簡単です。 – Matt