第一种:切片
def reverse_string_by_word(s):
lst = s.split() # split by blank space by default
return ’ ‘.join(lst[::-1])
s = ‘Power of Love’
print reverse_string_by_word(s)
… Love of Power
s = ‘Hello World!’
print reverse_string_by_word(s)
…..World! Hello
第二种:用re模块
import re
s = ‘Hello World!’
re.split(r’\s+’, s) # will discard blank spaces
[‘Hello’, ‘World!’]
re.split(r’(\s+)’, s) # will keep spaces as a group
[‘Hello’, ’ ‘, ‘World!’]
s = ‘< Welcome to EF.COM! >’
re.split(r’\s+’, s) # split by spaces
[‘<’, ‘Welcome’, ‘to’, ‘EF.COM!’, ‘>’]
re.split(r’(\w+)’, s) # exactly split by word
[‘< ‘, ‘Welcome’, ’ ‘, ‘to’, ’ ‘, ‘EF’, ‘.’, ‘COM’, ‘! >’]
re.split(r’(\s+|\w+)’, s) # split by space and word
[‘<’, ’ ‘, ”, ‘Welcome’, ”, ’ ‘, ”, ‘to’, ”, ’ ‘, ”, ‘EF’, ‘.’, ‘COM’, ‘!’, ’ ‘, ‘>’]
”.join(re.split(r’(\s+|\w+)’, s)[::-1])
‘> !COM.EF to Welcome <’
”.join(re.split(r’(\s+)’, s)[::-1])
‘> EF.COM! to Welcome <’
”.join(re.split(r’(\w+)’, s)[::-1])
‘! >COM.EF to Welcome< ‘
第三种:
”.join(reversed(re.split(r’(\s+|\w+)’, s)))
‘> !COM.EF to Welcome <’
Python翻转字符串(reverse string), 一共包含5种方法, 其中第一种最简单, 即步长为-1, 输出字符串;
方法如下
5种方法的比较:
- 简单的步长为-1, 即字符串的翻转(常用);
- 交换前后字母的位置;
- 递归的方式, 每次输出一个字符;
- 双端队列, 使用extendleft()函数;
- 使用for循环, 从左至右输出;
string = ‘abcdef’
def string_reverse1(string):
return string[::-1]
def string_reverse2(string):
t = list(string)
l = len(t)
for i,j in zip(range(l-1, 0, -1), range(l//2)):
t[i], t[j] = t[j], t[i]
return “”.join(t)
def string_reverse3(string):
if len(string) <= 1:
return string
return string_reverse3(string[1:]) + string[0]
from collections import deque
def string_reverse4(string):
d = deque()
d.extendleft(string)
return ”.join(d)
def string_reverse5(string):
#return ”.join(string[len(string) - i] for i in range(1, len(string)+1))
return ”.join(string[i] for i in range(len(string)-1, -1, -1))
print(string_reverse1(string))
print(string_reverse2(string))
print(string_reverse3(string))
print(string_reverse4(string))
print(string_reverse5(string))
输出:
fedcba
fedcba
fedcba
fedcba
fedcba