我想取一个字符串并更改字符串中字母的顺序。
我可以通过以下代码实现这一目标:
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'
谢谢!
答案 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])