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

2022-09-28 20:00:17 字數 2993 閱讀 8851

按單詞反轉字串是一道很常見的面試題。在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,等等。計算機由於使用二進位制,所以,有時候用十六進製制表示整數比...