Python中的反轉字串問題

2021-08-16 07:07:18 字數 2278 閱讀 2906

按單詞反轉字串是一道很常見的面試題。在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

['<'

, 'welcome'

, 'to'

, 'ef.com!'

, '>'

]>>>

re.split(r'(\w+)'

, s) # exactly split by word

['< '

, 'welcome'

, ' '

, 'to'

, ' '

, 'ef'

, '.'

, 'com'

, '! >'

]>>>

re.split(r'(\s+|\w+)'

, s) # split by space and word

['<'

, ' '

, ''

, 'welcome'

, ''

, ' '

, ''

, 'to'

, ''

, ' '

, ''

, 'ef'

, '.'

, 'com'

, '!'

, ' '

, '>'

]>>>

''.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....