如何在字符串中移动单词?

时间:2012-11-26 22:19:25

标签: python python-2.7

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方法来代替。

谢谢!

编辑:以下评论:上面示例中的数字参数旨在指定单词数量的“delta”。对于上面的例子,2意味着“向右移动'快速'2个单词”。

3 个答案:

答案 0 :(得分: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是移动单词的位置数。)

答案 1 :(得分: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,但它很有趣。

(更不用说非常不理想了)

答案 2 :(得分: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'