實現字符串反轉的方法有很多,這里我簡單介紹一些常用的。
1)字符串切片:
>>> s = '123456' >>> print(s[::-1]) 654321
這種方式最簡單,效率最高,是我最推薦的方法。當然這里的切片並不是字符串獨有的,列表也可以,實際上我們認為字符串是特殊的列表。
>>> s = '123456' >>> list(s)[::-1] ['6', '5', '4', '3', '2', '1'] >>> print(''.join(list(s)[::-1])) 654321
2)借助列表的reverse():
>>> 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:
>>> 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。
reduce() 函數會對參數序列中元素進行累積。函數將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最后得到一個結果。
因此,上面兩種結果的不同其實是reduce()的迭代對象發生了變化導致,對於數字列表而言前后並沒有區別,但是字符串就不同了,當迭代對象是字符串時,'+'號不再是加號,而是連接符,這就是為什么x+y和y+x得到相反結果的原因所在。