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