Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在字符串中移动单词?_Python_Python 2.7 - Fatal编程技术网

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

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' 我的想法是编写一个函数,将其拆分为一个列表,在列表中迭代匹配项,然后在找到单词时重新排序。我的问题真的是要找出是否有“圆滑

在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'
我的想法是编写一个函数,将其拆分为一个列表,在列表中迭代匹配项,然后在找到单词时重新排序。我的问题真的是要找出是否有“圆滑的”/蟒蛇式的方法来代替

谢谢

编辑:根据下面的注释:上面示例中的数字参数旨在指定字数的“增量”。在上面的例子中,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