實現字符串反轉的方法有不少,這裏我簡單介紹一些經常使用的。python
1)字符串切片:函數
>>> s = '123456' >>> print(s[::-1]) 654321
這種方式最簡單,效率最高,是我最推薦的方法。固然這裏的切片並非字符串獨有的,列表也能夠,實際上咱們認爲字符串是特殊的列表。spa
>>> s = '123456' >>> list(s)[::-1] ['6', '5', '4', '3', '2', '1'] >>> print(''.join(list(s)[::-1])) 654321
2)藉助列表的reverse():code
>>> s = '123456' >>> ls = list(s) >>> ls.reverse() >>> ls ['6', '5', '4', '3', '2', '1'] >>> print(''.join(ls)) 654321
3)使用reduce()函數:對象
這裏要注意python版本問題,若是是python 2,那麼reduce()是一個內置函數,能夠直接使用;可是在python 3,reduce()從內置函數移除了,放入了functools模塊,所以須要從functools中導入。這裏我使用的是python 3:blog
>>> s = '123456' >>> from functools import reduce >>> reduce(lambda x,y:y+x,s) '654321' >>> reduce(lambda x,y:x+y,s) '123456'
你們有沒有發現兩次reduce有什麼不一樣。沒有的話咱們再看兩個例子就明白了:字符串
>>> a = [1,2,3,4] >>> reduce(lambda x,y:y+x,a) 10 >>> reduce(lambda x,y:x+y,a) 10
首先lambda定義一個匿名函數,它有兩個參數x和y,第一次是計算y+x,第二次是計算x+y。io
reduce() 函數會對參數序列中元素進行累積。函數將一個數據集合(鏈表,元組等)中的全部數據進行下列操做:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 一、2 個元素進行操做,獲得的結果再與第三個數據用 function 函數運算,最後獲得一個結果。function
所以,上面兩種結果的不一樣實際上是reduce()的迭代對象發生了變化致使,對於數字列表而言先後並無區別,可是字符串就不一樣了,當迭代對象是字符串時,'+'號再也不是加號,而是鏈接符,這就是爲何x+y和y+x獲得相反結果的緣由所在。class