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

嗯,这个

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 回答
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 回答