Python 如何在字符串中移动单词?
在Python2.7中,是否有一种“本机”方式可以将单词(空格分隔的子字符串)移动到更长的字符串中?基本上,我想要的是:Python 如何在字符串中移动单词?,python,python-2.7,Python,Python 2.7,在Python2.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' 我的想法是编写一个函数,将其拆分为一个列表,在列表中迭代匹配项,然后在找到单词时重新排序。我的问题真的是要找出是否有“圆滑
ret = 'The quick brown fox jumps over the lazy dog'.move_word('quick',2)
# ret = 'The brown fox quick jumps over the lazy dog'
我的想法是编写一个函数,将其拆分为一个列表,在列表中迭代匹配项,然后在找到单词时重新排序。我的问题真的是要找出是否有“圆滑的”/蟒蛇式的方法来代替
谢谢
编辑:根据下面的注释:上面示例中的数字参数旨在指定字数的“增量”。在上面的例子中,2的意思是“向右移动'quick'两个单词”。好吧,这个
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:])
可能是不是肾盂,但很有趣
(更不用说高度非最优)不确定我是否会称之为“滑头”,但它确实起到了作用,而且非常简单:
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是移动单词的位置数。)下面是我要做的。它将字符串拆分为一个列表,移动该项,然后将其重新连接在一起:
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'
不,没有捷径。我认为你走对了。2是什么意思?移动到位置2,向前移动2,向后移动2?为不够清晰表示歉意-我打算让数值参数表示单词位置的“增量”,因此在我上面给出的示例中,目的是移动字符串中后面与“quick”2单词匹配的单词。我将保留这个问题,因为评论假设了不同的规格(除非编辑这个问题是更好的礼仪)。我认为编辑这个问题会更好。您给出的示例已经假设了一个delta——使其显式是好的。(可能为拆分添加一个
lambda
是个好主意)可能不是Pythonic?一定是“乐趣”的定义——我从来没听说过;)好吧,既然你能把所有的东西都放在一个长长的(缓慢的)一行纸上,为什么还要保持简单呢我的头有点痛,但还是很有趣:)words.insert(…,words.pop(…)
让我紧张。@sammusmann我想你的紧张是因为pop修改列表并使索引无效,对吗?@Bryan Yes。仔细考虑后,我认为这不会成为问题,但如果我写这篇文章,我就不会在insert
中使用pop
。