1. 程式人生 > >面試官讓用5種python方法實現字串反轉?對不起我有16種

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

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

學習Python中有不明白推薦加入交流群

            號:960410445
            群裡有志同道合的小夥伴,互幫互助,
            群裡有不錯的視訊學習教程和PDF!

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

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

image

**方法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 + bprint(b)

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

方法03 反向迴圈迭代法

a = 'abcdef'b = ''for i in a[::-1]:    #b = b + i    b += iprint(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 reducedef f(x,y):    return y + xb = 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 collectionsb = 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 pdb = 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種方法,就能披荊斬棘,走向人生巔峰。