【问题标题】:What is the most pythonic way to re-order letters in a string?对字符串中的字母进行重新排序的最 Pythonic 方式是什么?
【发布时间】:2019-10-05 07:34:57
【问题描述】:

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

我可以通过以下代码实现:

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

这会产生输出:

'World! Hello'

这就是我想要达到的目标。

但是,是否可以以更 Pythonic 的方式编写字符串中元素的重新排列?例如,无需切片和添加,而是以某种方式在重新表述中指定哪个切片“去哪里”。

谢谢!


稍后编辑:

具体来说,我想在单词之间没有空格的情况下实现这一点。例如:

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

这会产生输出:

'World!Hello'

这又是我想要实现的目标,但是我是否可以以更 Python 的方式编写切片和添加行,例如,至少不需要显式执行添加?

注意:我希望能够使用元素的索引显式指定切片发生的位置并切换两个切片的位置。

所以它也可能是:

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

这会产生输出:

'orld!HelloW'

谢谢!

【问题讨论】:

  • @Error-SyntacticalRemorse:嗯,' '.join(reversed(s.split()))' '.join(s.split()[::-1]);你不能使用.reverse(),因为这是一个返回None的就地突变。

标签: python python-3.x string slice


【解决方案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

【讨论】:

【解决方案2】:

我们也可以通过这种方式达到同样的效果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2017-10-04
    • 2011-08-19
    • 2011-12-09
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多