簡體   English   中英

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

[英]What is the most pythonic way to re-order letters in a string?

我想要一個字符串並更改字符串中字母的順序。

我可以通過以下代碼來實現:

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'

謝謝!

將字符串拆分為單詞列表,逆向列表,然后將列表重新連接到字符串

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

我們還可以通過這種方式獲得相同的結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM