重新排列字符串中字母的最有效方式是什么?

时间:2019-05-18 01:59:50

标签: python-3.x string slice

我想取一个字符串并更改字符串中字母的顺序。

我可以通过以下代码实现这一目标:

s = 'Hello World!'
s = s[6:] + s[5:6] + s[:5]
s

这将产生输出:

'World! Hello'

这是我想要实现的。

但是,是否可以用更Python化的方式编写字符串中元素的重新排列?例如,无需切片和添加,而是以某种方式指定重新配置中哪个切片“到达何处”。

谢谢!


以后编辑:

特别是我想在单词之间没有空格的情况下实现这一点。例如:

s = 'HelloWorld!'
s = s[5:] + s[:5]
s

这将产生输出:

'World!Hello'

这又是我要实现的目标,但是例如,我是否可以至少以一种更pythonic的方式编写切片和添加行,而不必至少显式执行添加操作?

注意:我希望能够使用元素的索引明确指定切片将在哪里发生,并切换两个切片的位置。

所以它也可能是:

s = 'HelloWorld!'
s = s[6:] + s[:6]
s

这将产生输出:

'orld!HelloW'

谢谢!

2 个答案:

答案 0 :(得分:1)

将字符串拆分为单词列表,反转该列表,然后将列表重新链接为字符串

s = "hello world"
li = reversed(s.split())
res = ' '.join(li)

输出将为

world hello

或者我们可以一行完成所有这些操作

s = "hello world"
res = ' '.join(reversed(s.split()))

为了反转字符串中没有空格的单词,我们还需要知道单词在哪里被拆分,为此我们需要一个列表。 例如对于HelloWorldThisIsMe,该列表将为[0,5,10,14,16,18]

因此,新代码将根​​据索引拆分单词,反转列表并将列表重新组合成字符串

def reorder(indexes, s):

    res = [s[indexes[idx]:indexes[idx+1]] for idx in range(len(indexes)-1)]
    return ''.join(reversed(res))

print(reorder([0,5,10,14,16,18],'HelloWorldThisIsMe'))
#MeIsThisWorldHello

print(reorder([0,5,11],'HelloWorld!'))
#World!Hello

答案 1 :(得分:0)

我们也可以通过这种方式获得相同的结果:

s = "Hello World!"
rev = ' '.join(s.split(' ')[-1::-1])