首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 字串反轉完全指南:逐字元/逐詞反轉、切片、reversed、正則保留空白四大模式

     編輯:更多程式設計知識

字串反轉分逐字元與逐詞兩種語意。Python 提供切片、reversed、split/join、正則等多種工具,各有優劣。

逐字元反轉

方法一:切片 [::-1] (最快、最慣用)


s = 'abcd'
rev = s[::-1]
print(rev)  # 'dcba'

方法二:reversed() + join (語意明確、支援迭代器)


rev = ''.join(reversed(s))
print(rev)  # 'dcba'

# reversed 回傳迭代器,可直接迴圈
for c in reversed(s):
    print(c, end='')  # d c b a

效能對比


import timeit
s = 'a' * 10000
print('slice:', timeit.timeit('s[::-1]', globals=globals()))
print('reversed:', timeit.timeit('"".join(reversed(s))', globals=globals()))
# 切片通常快 2-3x

逐詞反轉

方法一:split + reverse + join (標準、壓縮空白)


s = 'Today is really a good day'
words = s.split()           # ['Today', 'is', 'really', 'a', 'good', 'day']
words.reverse()             # 就地反轉
print(' '.join(words))      # 'day good a really is Today'

# 一行版
print(' '.join(s.split()[::-1]))
print(' '.join(reversed(s.split())))

方法二:正則分割保留原始空白 (re.split 捕獲組)


import re
s = 'Today  is   really a good day'  # 多重空白

# 分割並保留分隔符
parts = re.split(r'(\s+)', s)
print(parts)
# ['Today', '  ', 'is', '   ', 'really', ' ', 'a', ' ', 'good', ' ', 'day']

parts.reverse()
print(''.join(parts))
# 'day good a really is Today' (空白模式完整保留)

方法三:reversed + 正則 (單行版)


rev = ''.join(reversed(re.split(r'(\s+)', s)))

進階:Unicode 字素叢集正確反轉


import regex  # pip install regex

s = 'e\u0301\u0302'  # e + 重音 + 迴音 (3 代碼點,1 字素)
print(''.join(reversed(s)))           # 錯誤順序:迴音+重音+e
print(''.join(regex.findall(r'\X', s)[::-1]))  # 正確:單字素反轉

選型指南

需求推薦方法備註
逐字元、效能優先s[::-1]C 層實現,最快
逐字元、語意明確/串接管線''.join(reversed(s))可直接餵給迴圈
逐詞、單一空白分隔' '.join(reversed(s.split()))標準做法
逐詞、保留原始空白/分隔符''.join(reversed(re.split(r'(\s+)', s)))捕獲組關鍵
含合成字元 (emoji、重音)regex.findall(r'\X', s)[::-1]需安裝 regex

理解語意差異,選對工具,字串反轉不再是面試題陷阱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved