面試官讓用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種方法,就能披荊斬棘,走向人生巔峰。