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