web-dev-qa-db-ja.com

pythonで単語の終わりのインデックスを見つける

文字列内の単語の終了インデックスを見つけるための良い方法はありますか?

私の方法はそのようなものです:

text = "fed up of seeing perfect fashion photographs"
Word = "fashion"
wordEndIndex = text.index(Word) + len(Word) - 1
14
Prag

これがより良い方法であるかどうかコメントすることはできませんが、あなたが提案したものの代わりに、そのWordの後に次のスペースを見つけ、それを使用してインデックスを取得することもできます。

text = "fed up of seeing perfect fashion photographs"
Word = "fashion"
temp = text.index(Word)
wordEndIndex = temp + text[temp:].index(' ') - 1

あなたのアプローチはより自然に見え、おそらくより高速です。

3
Antimony

面白くするために、Wordの最後の文字のインデックスを1回のパスで検索する第一原理バージョンを次に示します。

def Word_end_index(text, Word):
    wi = wl = len(Word)
    for ti, tc in enumerate(text):
        wi = wi - 1 if tc == Word[-wi] else wl
        if not wi:
            return ti

    return -1

私はいくつかの短いバージョンを持っていますが、それらはスライスを使用しており、文字列がすべての場所で複製されるため、かなり非効率的です。

2
Robin Hilliard

あなたが本当にwantが終了インデックスを知るかどうかに依存します。おそらくあなたは実際にtextのビットにもっと興味がありますか?次に、このようなことをしていますか?

>>> text[wordEndIndex:]
'n photographs'

本当にインデックスが必要な場合は、実行したことを実行しますが、異なるtextsおよびWordsを呼び出すことができる関数内にラップするので、これを繰り返す必要はありません。コード。次に、関数にわかりやすい名前を付ければ、それは単純で理解しやすいものになります。

一方、textのビットにもっと興味がある場合は、インデックスが何であるかを気にする必要もありません。

>>> text.split(Word)
['fed up of seeing perfect ', ' photographs']

もちろん、Wordがテキストに複数回出現する可能性がある場合、これはさらに複雑になります。その場合、Wordの最初の出現で分割し、数値のインデックスを返さずに前後のコンポーネントを返すように別の関数を定義できます。

2
Constance