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个单词”。
答案 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'