按單詞反轉字串是一道很常見的面試題。在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])
'! >cwww.cppcns.comom.ef to welcome< '
如果你覺得用切片將序列倒序可讀性不高,那麼其實也可以這樣寫。
>>> ''.join(reversed(re.split(r'(\s+|\w+)', s)))
'> !com.ef to welcome
一句話搞定,so easy!
python翻轉字串(reverse string),一共包含5種方法, 其中第一種最簡單, 即步長為-1, 輸出字串;
方法如下
5種方法的比較:
1. 簡單的步長為-1, 即字串的翻轉(常用);
2. 交換前後字母的位置;
3. 遞迴的方式, 每次輸出乙個字元;
4. 雙端佇列, 使程式設計客棧用extendleft()函式;
5. 使用for迴圈, 從左至右輸出;
**:# -*- coding: utf-8 -*-
#eclipse pydev, python 3.3
#by c.l.wang
#timwww.cppcns.come: 2014. 4. 11
string = 'abcdef'
def string_reverse1(string):
return string[::-1]
def string_reverse2(string):
t = list(string)
l = len(t)
for i,j in zip(range(l-1, 0, -1), range(l//2)):
t[i], t[j] = t[j], t[i]
return "".join(t)
def string_reverse3(string):
if len(string) <= 1:
return string
return string_reverse3(string[1:]) + string[0]
from collections import deque
def string_reverse4(string):
d = deque()
d.extendleft(string)
return ''.join(d)
def string_reverse5(string):
#return ''.join(string[len(string) - i] for i in range(1, len(string)+1))
return ''.join(string[i] for i in range(len(string)-1, -1, -1))
print(string_reverse1(string))
print(string_reverse2(string))
print(string_reverse3(string))
print(string_reverse4(string))
print(string_reverse5(string))
輸出:fedcba
fedcba
fedcba
fedcba
fedcba
本文標題: 簡單談談python中的反轉字串問題
本文位址:
簡單談談python中的多程序
程序是由系統自己管理的。1 最基本的寫法 from multiprocessing import pool def f x return x x if name main p pool 5 print p.map f,1,2,3 1,4,9 2 實際上是通過os.fork的方法產生程序的 unix中...
簡單談談Python的pycurl模組
pycurl是乙個用c語言編寫的libcurl python實現,功能非常強大,支援操作協議有ftp程式設計客棧,http,https,telnet等。模組的常用方法說明 close 方法,對應libcurl包中的curl easy cleanup方法,無引數,實現關閉 curl物件。perform...
簡單談談Python中的幾種常見的資料型別
簡單談談python中的幾種常見的資料型別 中,能夠直接處理的資料型別有以下幾種 一 整數 python可以處理任意大小的整數,當然包括負整數,在python程式中,整數的表示方法和數學上的寫法一模一樣,例如 1,100,8080,0,等等。計算機由於使用二進位制,所以,有時候用十六進製制表示整數比...