2016-04-30 30 views
0

我能夠想出兩種不同的方法來反轉python中的字符串。隨着常見情況的出現,代碼行數越多,代碼越慢,因此我編寫了以下代碼行。在Python中反轉字符串的最快方法

代碼1

"".join(reversed(map(lambda x:x,st))) 

代碼2

st[::-1] 

這些往往給我類似的表現,但我認爲第一個應該是一個緩慢的方法,因爲它執行3點的操作。 即使對於一個20000長的字符串,我也無法看到即使是第一眼看不清楚的性能差異。

+0

你是如何計時的?對於有20,000個字符的字符串,我可以得到合理的結果:https://i.imgur.com/DhKaxhR.png – Blender

+2

任何你沒有使用的理由:'''.join(反向(st))'在第一種情況下? – Cyb3rFly3r

+0

我使用time.now()開始代碼,time.now()結束時進行基準測試。 @ Cyb3rFly3r:這不是要提出一個有效的算法,但要看看哪一個會更快 但是'''.join(反轉(st))'沒有削弱我的想法 –

回答

5

我看到了一個區別。

首先,map(lambda x: x, st)是怎麼回事?什麼目的?

使用timeit模塊測試代碼:

$ python -m timeit '"".join(reversed("abcdefghijklmnopqrstuvwxyz"))' 
1000000 loops, best of 3: 0.586 usec per loop 
$ python -m timeit '"abcdefghijklmnopqrstuvwxyz"[::-1]'   
10000000 loops, best of 3: 0.0715 usec per loop 

正如你所看到的,切片〜8X我的機器上更快地爲這個特定的輸入。它也更簡潔。

+0

這是更多符合我的期望;在Python社區中已知方法2比所有其他方法更快地反轉字符串。 – Cyb3rFly3r

+0

「」.join真的是效率低下......反對只是扭轉,這個人做了多個動作。 –