1. 程式人生 > >字串反轉的實現方法總結

字串反轉的實現方法總結

文章目錄

方法1:對稱交換法

str = 'abcdef'
def f(s):
    s = list(s)
    if
len(s) <=1: return s i = 0 length = len(s) while i < length/2: s[i],s[length - 1 - i] = s[length - 1 - i],s[i] i += 1 return ''.join(s) newStr = f(str) print('反轉前的字串:', str) # abcdef print('反轉後的字串:', newStr) # fedcba

說明: 遍歷字串前一半的元素,然後與後一半對稱的那個位置的元素進行交換,以達到字串反轉。

方法2:函式遞迴法

str = 'abcdef'
print(str[:-1])    #   str[:-1]  擷取除最後一個元素外的所有元素(-1 表示最後一個元素的索引)
def fun(s):
    if len(s) <= 1:
        return s
    return s[-1] + fun(s[:-1])
newStr = fun(str)
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 使用遞迴的思想,建立函式,倒序新增字串,直到字串長度小於等於1後停止。

方法3:列表反轉法

str = 'abcdef'
ll = list(str)  # list()方法將字串轉換成了列表 ['a', 'b', 'c', 'd', 'e', 'f']
ll.reverse()    # 將list反轉,變成了 ['f', 'e', 'd', 'c', 'b', 'a']
newStr = ''.join(ll)  # 採用join()方法遍歷列表,合併成一個字串
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: Python中,列表可以進行反轉,我們只要把字串轉換成列表,使用reverse()方法,進行反轉,然後再使用字串的join()方法遍歷列表,合併成一個字串

方法4:迴圈反向迭代法

str1 = 'abcdef'
str2 = ''
for i in str1:
    str2 = i + str2
print('反轉前的字串:', str1)    #  abcdef
print('反轉後的字串:', str2)    #  fedcba

說明: 字串屬於序列的一種,我們可以使用for迴圈遍歷字串,然後,不斷反向賦值給變數str2,最後輸出變數str2,就完成了字串反轉。

方法5:倒序切片法

str = 'abcdef'
newStr = str[::-1]
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 利用切片特性,一步到位

方法6:遍歷索引法

str = 'abcdef'
newStr = ''
for i in range(1, len(str)+1):
    newStr = newStr + str[-i]
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: *字串作為序列,可以進行索引處理,所以我們先遍歷索引數字,然後倒序提取字母,然後合併成字串。

方法7:反向遍歷索引法

str = 'abcdef'
newStr = ''
print(len(str))                        # 6
for i in range(len(str)-1, -1, -1):
    newStr = newStr + str[i]
print('反轉前的字串:', str)            #  abcdef
print('反轉後的字串:', newStr)         #  fedcba

說明: range()函式有三個引數:start,end,step,且左閉右開,我們從最後一個索引開始,最開始的索引結束,倒序遍歷索引,然後反向提取字串,最後合併

方法8:列表彈出法

str = 'abcdef'
str = list(str)  # 將字串str轉換成列表 ['a', 'b', 'c', 'd', 'e', 'f']
newStr = ''
while len(str) > 0:
    newStr = newStr + str.pop()
print('反轉後的字串:', newStr)     #  fedcba

說明: 列表有一種彈出的方法pop(),預設彈出的是最後一個元素。每彈出一個元素就加入到空字串 newStr中,最終實現原字串的反轉。

方法9:反向迴圈迭代法

str = 'abcdef'
newStr = ''
for i in str[::-1]:
    newStr = newStr + i
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

程式碼改進:

str = 'abcdef'
newStr = ''.join(i for i in str[::-1])
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 使用列表解析式,然後通過join()方法,反轉合併字串。

方法10:累積相加法

str = 'abcdef'
from functools import reduce
def f(x,y):
    return y + x
newStr = reduce(f,str)
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 使用python中的reduce()函式。先建立一個字串倒序相加函式,然後將字串和新建立的函式一起傳入reduce()函式中,進行字串倒序累積相加,最後實現反轉字串。

方法11:匿名函式法

str = 'abcdef'
from functools import reduce
newStr = reduce(lambda x,y:y+x,str)
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明:方法10的進階版,使用lambda匿名函式建立字串倒序相加函式,然後進行累積相加,得到字串反轉結果。

方法12:列表倒序法

str = 'abcdef'
ll = list(str)    # 將字串str轉換成列表 ['a', 'b', 'c', 'd', 'e', 'f']
ll.sort(reverse=True)   # 列表降序排列
newStr = ''.join(ll)
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 採用列表的sort(reverse=True)方法,降序排列,不過,這一方法有個弊端,它並不是按字串的順序進行升序或降序排列,而是按 “ASCII 字元順序” 進行排序,所以,如果字串不是按從小到大排列,那麼執行後,排序會是錯誤的

方法13:雙向佇列排序法

str = 'abcdef'
import collections
newStr = collections.deque()
for i in str:
    newStr.appendleft(i)
newStr = ''.join(newStr)
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 遍歷字串,向左新增入雙向佇列中,最後使用join()方法合併,實現字串反轉。

方法14:雙向佇列反轉法

str = 'abcdef'
import collections
newStr = collections.deque()
newStr.extend(list(str))
newStr.reverse()
newStr = ''.join(newStr)
print('反轉前的字串:', str)        #  abcdef
print('反轉後的字串:', newStr)     #  fedcba

說明: 同樣使用雙向佇列,把字串轉換成列表新增到佇列中,然後整個進行反轉,使用join()方法合併,實現字串反轉。

文章參考: 小詹學Python 公眾號的 《面試官讓用 5 種 python 方法實現字串反轉 ?對不起我有16種……》