Python中的反轉字串問題

2022-05-09 02:24:10 字數 1678 閱讀 1031

按單詞反轉字串是一道很常見的面試題。在python中實現起來非常簡單。

def reverse_string_by_word(s):

lst = s.split() # split by blank space by default

return ' '.join(lst[::-1])

s = 'power of love'

print reverse_string_by_word(s)

# love of power

s = 'hello world!'

print reverse_string_by_word(s)

# world! hello

上面的實現其實已經能滿足大多數情況,但是並不完美。比如第二個字串中的感嘆號並沒有被翻轉,而且原字串中的空格數量也沒有保留。(在上面的例子裡其實hello和world之間不止乙個空格)

我們期望的結果應該是這樣子的。

print reverse_string_by_word(s)

# expected: !world hello

要改進上面的方案還不把問題複雜化,推薦使用re模組。你可以查閱re.split()的官方文件。我們看一下具體例子。

>>> import re

>>> s = 'hello world!'

>>> re.split(r'\s+', s) # will discard blank spaces

['hello', 'world!']

>>> re.split(r'(\s+)', s) # will keep spaces as a group

['hello', ' ', 'world!']

>>> s = '< welcome to ef.com! >'

>>> re.split(r'\s+', s) # split by spaces

['']

>>> re.split(r'(\w+)', s) # exactly split by word

['< ', 'welcome', ' ', 'to', ' ', 'ef', '.', 'com', '! >']

>>> re.split(r'(\s+|\w+)', s) # split by space and word

['']

>>> ''.join(re.split(r'(\s+|\w+)', s)[::-1])

'> !com.ef to welcome

>>> ''.join(re.split(r'(\s+)', s)[::-1])

'> ef.com! to welcome

>>> ''.join(re.split(r'(\w+)', s)[::-1])

'! >com.ef to welcome< '

如果你覺得用切片將序列倒序可讀性不高,那麼其實也可以這樣寫。

>>> ''.join(reversed(re.split(r'(\s+|\w+)', s)))

'> !com.ef to welcome

一句話搞定,so easy!

Python中的反轉字串問題

按單詞反轉字串是一道很常見的面試題。在python中實現起來非常簡單。def reverse string by word s lst s.split split by blank space by default return join lst 1 s power of love print re...

簡單談談Python中的反轉字串問題

按單詞反轉字串是一道很常見的面試題。在python中實現起來非常簡單。def reverse string by word s lst s.split split by blank space by default return join lst 1 s power of love print re...

字串反轉問題

牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....