Python反轉字符串 – 5種方法和最佳方法

字串在 Python 中沒有內建的 reverse() 函數。然而,有各種方法可以在 Python 中反轉字串。

1. 如何在 Python 中反轉字串?

一些常見的反轉字串方法包括:

  • 使用 切片 來創建字串的反轉複本。
  • 使用 for 迴圈 並以相反的順序附加字符
  • 使用 while 迴圈 以相反的順序迭代字串字符並附加它們
  • 使用 string join() 函數與 reversed() 迭代器
  • 從字串創建一個 列表,然後調用其 reverse() 函數
  • 使用遞迴

1.1) 使用切片的 Python 反轉字串

def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))

如果您執行上述的 Python 腳本,輸出將會是:

Reverse String using slicing = FE∂çBA

1.2) 使用 For 迴圈反轉字串

def reverse_for_loop(s):
    s1 = ''
    for c in s:
        s1 = c + s1  # appending chars in reverse order
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using for loop =', reverse_for_loop(input_str))

輸出:使用 for 迴圈反轉字串 = FE∂çBA

1.3) 使用 While 迴圈反轉字串

def reverse_while_loop(s):
    s1 = ''
    length = len(s) - 1
    while length >= 0:
        s1 = s1 + s[length]
        length = length - 1
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using while loop =', reverse_while_loop(input_str))

1.4) 使用 join() 和 reversed() 反轉字串

def reverse_join_reversed_iter(s):
    s1 = ''.join(reversed(s))
    return s1

1.5) 使用 List reverse() 反轉字串

def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)

1.6) 使用遞迴反轉字串

def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]

2. 在Python中反轉字符串的最佳方法

我們可以通過多種算法來反轉字符串。我們已經看過其中六種。但應該選擇哪一種算法來反轉字符串呢?我們可以使用timeit模塊運行這些函數的多次迭代,並獲取運行它們所需的平均時間。所有上述函數都存儲在一個名為string_reverse.py的Python腳本中。我對所有這些函數進行了一次次地執行,每次執行1,00,000次,使用timeit模塊獲得了最佳5次運行的平均值。

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_slicing("ABç∂EF"*10)'
100000 loops, best of 5: 0.449 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_list("ABç∂EF"*10)'
100000 loops, best of 5: 2.46 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_join_reversed_iter("ABç∂EF"*10)'
100000 loops, best of 5: 2.49 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_for_loop("ABç∂EF"*10)'
100000 loops, best of 5: 5.5 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_while_loop("ABç∂EF"*10)'
100000 loops, best of 5: 9.4 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_recursion("ABç∂EF"*10)'
100000 loops, best of 5: 24.3 usec per loop

下表顯示了算法的結果和從最佳算法到最慢算法的相對速度。

Algorithm TimeIt Execution Time (Best of 5) Slowness
Slicing 0.449 usec 1x
List reverse() 2.46 usec 5.48x
reversed() + join() 2.49 usec 5.55x
for loop 5.5 usec 12.25x
while loop 9.4 usec 20.94x
Recursion 24.3 usec 54.12x

3. 總結

在Python中,我們應該使用切片來反轉字符串。它的代碼非常簡單小巧,我們不需要編寫自己的邏輯來實現字符串的反轉。同時,根據上述測試執行結果,這也是最快的反轉字符串的方法。

你可以從我們的GitHub 存儲庫檢查完整的 Python 腳本和更多 Python 範例。

4. 參考資料

Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string