我能夠想出兩種不同的方法來反轉python中的字符串。隨着常見情況的出現,代碼行數越多,代碼越慢,因此我編寫了以下代碼行。在Python中反轉字符串的最快方法
代碼1
"".join(reversed(map(lambda x:x,st)))
代碼2
st[::-1]
這些往往給我類似的表現,但我認爲第一個應該是一個緩慢的方法,因爲它執行3點的操作。 即使對於一個20000長的字符串,我也無法看到即使是第一眼看不清楚的性能差異。
我能夠想出兩種不同的方法來反轉python中的字符串。隨着常見情況的出現,代碼行數越多,代碼越慢,因此我編寫了以下代碼行。在Python中反轉字符串的最快方法
代碼1
"".join(reversed(map(lambda x:x,st)))
代碼2
st[::-1]
這些往往給我類似的表現,但我認爲第一個應該是一個緩慢的方法,因爲它執行3點的操作。 即使對於一個20000長的字符串,我也無法看到即使是第一眼看不清楚的性能差異。
我看到了一個區別。
首先,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我的機器上更快地爲這個特定的輸入。它也更簡潔。
這是更多符合我的期望;在Python社區中已知方法2比所有其他方法更快地反轉字符串。 – Cyb3rFly3r
「」.join真的是效率低下......反對只是扭轉,這個人做了多個動作。 –
你是如何計時的?對於有20,000個字符的字符串,我可以得到合理的結果:https://i.imgur.com/DhKaxhR.png – Blender
任何你沒有使用的理由:'''.join(反向(st))'在第一種情況下? – Cyb3rFly3r
我使用time.now()開始代碼,time.now()結束時進行基準測試。 @ Cyb3rFly3r:這不是要提出一個有效的算法,但要看看哪一個會更快 但是'''.join(反轉(st))'沒有削弱我的想法 –