3

長い文字列内で単語 (スペースで区切られた部分文字列) を移動する Python 2.7 の「ネイティブ」な方法はありますか? 基本的に、私が探しているのは次のとおりです。

ret = 'The quick brown fox jumps over the lazy dog'.move_word('quick',2)
# ret = 'The brown fox quick jumps over the lazy dog'

私の考えでは、関数を記述してリストに分割し、一致するリストを繰り返し処理し、単語が見つかったら並べ替えます。私の質問は、代わりにこれを行うための「巧妙な」/Pythonic の方法があるかどうかを調べることです。

ありがとう!

編集: 以下のコメントごと: 上記の例の数値パラメーターは、単語数で「デルタ」を指定することを目的としていました。上記の例では、2 は「「すばやく」2 単語右に移動する」という意味でした。

4

3 に答える 3

5

これを「スリック」と呼ぶかどうかはわかりませんが、それはうまく機能し、非常に簡単です。

def reorder(s, word, delta):
  words = s.split()
  oldpos = words.index(word)
  words.insert(oldpos+delta, words.pop(oldpos))
  return ' '.join(words)

print reorder('The quick brown fox jumps over the lazy dog', 'quick', 2)

(あなたの例の2は、単語を移動する位置の数だと思います。)

于 2012-11-26T22:49:26.247 に答える
2

これが私がすることです。文字列をリストに分割し、アイテムを移動してから、結合し直します。

def move_word(s, word, pos):
   split = s.split()
   split.insert(pos, split.pop(split.index(word)))
   return ' '.join(split)

次に例を示します。

>>> s = 'The quick brown fox jumps over the lazy dog'
>>> move_word(s, 'quick', 2)
'The brown quick fox jumps over the lazy dog'
>>> move_word(s, 'jumps', 0)
'jumps The quick brown fox over the lazy dog'
于 2012-11-26T22:52:45.220 に答える
2

さて、これ

r = lambda x, y, z: " ".join(x.split(" ")[0:x.split(" ").index(y)] + x.split(" ")[x.split(" ").index(y)+1:x.split(" ").index(y)+z] + [x.split(" ")[x.split(" ").index(y)]] + x.split(" ")[x.split(" ").index(y)+z:])

おそらくPythonicではありませんが、楽しいです。

(言うまでもなく、非常に最適ではありません)

于 2012-11-26T22:40:19.720 に答える