歡迎光臨
每天分享高質量文章

面試官讓用5種python方法實現字串反轉?對不起我有16種……

導讀:最近身邊有個朋友,因為經受不住年薪30W+的誘惑,立志轉行成為一名程式員。在自學程式設計一個月以後,假裝自己是學生哥,信心滿滿地和應屆畢業生一起參加了校招。然而,進行了十幾次面試,統統折戟沉沙。

這哥們兒面試失意,就來找我訴苦:“面試題目太變態了。比如有家公司,讓我用5種程式設計方法實現字串反轉,整個面試我都在懵逼中度過的!”

嘖嘖~這明顯是基礎不夠扎實呀!區區5種方法,那可是信手拈來!下麵就開始我的表演!~

 

 

作者:聚聚

來源:資料團學社(ID:metrodata_xuexi)

方法01 反轉串列法 

a = 'abcdef'
b = list(a)
b.reverse()
b = ''.join(b)
print(b)

 

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

方法02 迴圈反向迭代法

a = 'abcdef'
b = ''
for i in a:
    b = i + b
print(b)

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

方法03 反向迴圈迭代法

a = 'abcdef'
b = ''
for i in a[::-1]:
    #b = b + i
    b += i
print(b)

字串本身就可以進行切片,當然也可以設定步長為-1,進行倒序。然後,再進行遍歷,迭代變數b,也可以達到反轉效果,邏輯和方法二相同。

方法04 倒序切片法

 

a = 'abcdef'
b = a[::-1]
print(b)

 

方法二和方法三的終極版本,直接反轉,一步到位。

方法05 遍歷索引法

 

a = 'abcdef'
b = ''
for i in range(1,len(a)+1):
    b = b + a[-i]
print(b)

 

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

方法06 串列彈出法

a = 'abcdef'
a = list(a)
b = ''
while len(a) > 0:
    b = b + a.pop()
print(b)

串列有一種彈出的方法pop(),彈出其中某個元素,預設為最後一個元素。我們設定變數b,然後不斷彈出字串的最後一個字元,加入變數b中,最終使得字串反轉。

方法07 串列解析式法

a = 'abcdef'
b = ''.join(i for i in a[::-1])
print(b)

方法三的簡便寫法,使用串列解析式,簡化程式碼書寫。最後同樣透過join()方法,反轉合併字串。

方法08 反向遍歷索引法

a = 'abcdef'
b = ''.join(i for i in a[::-1])
print(b)

 

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

方法09 累積相加法

a = 'abcdef'
from functools import reduce
def f(x,y):
    return y + x
b = reduce(f,a)
print(b)

使用python中的reduce()函式。先建立一個字串倒序相加函式和字串,一起傳入reduce函式中,執行,就可以進行字串倒序累積相加,最後反轉字串。

方法10 匿名函式法

a = 'abcdef'
b = reduce(lambda x,y:y+x,a)
print(b)

 

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

方法11 串列倒序法

a = 'abcdef'
a = list(a)
a.sort(reverse=True)
b = ''.join(a)
print(b)

 

用串列的sort(reverse=True)方法,倒序排列,不過,這一方法有個弊端,它並不是按字串的順序進行升序或降序排列,而是按英語26個字母進行排序,所以,如果字串不是按從小到大排列,那麼執行後,排序會是錯誤的。

方法12 雙向佇列排序法

a = 'abcdef'
import collections
b = collections.deque()
for i in a:
    b.appendleft(i)
b = ''.join(b)
print(b)

使用雙向佇列進行操作。解釋下雙向佇列,這是一個資料結構,但可以方便的向序列的兩邊進行新增,刪除元素。我們遍歷字串,向左新增入雙向佇列中,最後使用join()方法合併,使字串反轉。

方法13 雙向佇列反轉法

a = 'abcdef'
b = collections.deque()
b.extend(list(a))
b.reverse()
b = ''.join(b)
print(b)

 

同樣使用雙向佇列,把字串轉換成串列新增入佇列中,然後整個進行反轉,最後合併匯出。

方法14 一維陣列索引法

a = 'abcdef'
import pandas as pd
b = pd.Series(list(a))
b = ''.join(b[::-1])
print(b)

 

使用pandas的一維陣列結構,對其倒序遍歷,反轉字串。

方法15 函式遞迴法

a = 'abcdef'
def f(a):
    if len(a) <= 1:
        return a
    return a[-1] + f(a[:-1])
b = f(a)
print(b)

 

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

方法16 對稱交換法

a = 'abcdef'
def f(a):
    a = list(a)
    if len(a) <=1:
        return a
    i = 0
    length = len(a)
    while i length/2:
        a[i],a[length - 1 - i] = a[length - 1 - i],a[i]
        i += 1
    return ''.join(a)
b = f(a)
print(b)

 

這是最為銷魂的一個方法~大體思路是遍歷字串前一半的元素,然後和後一半對稱的那個位置的元素進行交換,以達到字串反轉。過程非常講究邏輯~

看了我的展示以後,小夥伴又開始摩拳擦掌,躍躍欲試,對以後的面試充滿了信心。傳說,只要掌握了這16種方法,就能披荊斬棘,走向人生巔峰。

    贊(5)

    分享創造快樂