在做leetcode的試題中陕贮,做到反轉(zhuǎn)整數(shù),就涉及到字符串反轉(zhuǎn)潘飘,為了盡可能可以寫出更多的方法肮之,于是寫下這篇文章
樣例:如 a='123456789' 反轉(zhuǎn)成 a='987654321'
第一種方法:使用字符串切片
>>> a='123456789'
>>> a = a[::-1]
'987654321'
第二種方法:使用reversed() 可讀行好,但速度較慢
>>> ''.join(reversed('123456789'))
'987654321'
封裝使用
reversed_string(a_string):
return a_string[::-1]
>>> reversed_string('123456789')
'123456789'
注意:
python的str對(duì)象中沒(méi)有內(nèi)置的反轉(zhuǎn)函數(shù)
python字符串相關(guān)基礎(chǔ)知識(shí):
python中福也,字符換是不可變局骤,更改字符串不會(huì)修改字符串,而是創(chuàng)建一個(gè)新的字符串暴凑。
字符串是可切片峦甩,切片字符串會(huì)以給定的增量從字符串中的一個(gè)點(diǎn)(向后或向前)向另一個(gè)點(diǎn)提供一個(gè)新字符串。它們?cè)谙聵?biāo)中采用切片表示法或切片對(duì)象:
# 下標(biāo)通過(guò)在大括號(hào)中包含冒號(hào)來(lái)創(chuàng)建切片:
string[start:stop:step]
# 要在大括號(hào)外創(chuàng)建切片现喳,您需要?jiǎng)?chuàng)建切片對(duì)
slice_obj = slice(start, stop, step)
string[slice_obj]
第三種方法:循環(huán)從字符串提取數(shù)據(jù)凯傲,然后進(jìn)行字符串拼接(慢)****
def reverse_a_string_slowly(a_string):
new_string = ''
index = len(a_string)
while index:
index -= 1 # index = index - 1
new_string += a_string[index] # new_string = new_string + character
return new_string
第四種方法:循環(huán)從字符串提取數(shù)據(jù),寫入到一個(gè)空列表中嗦篱,然后使用join進(jìn)行字符串拼接**(慢)******
def reverse_a_string_more_slowly(a_string):
new_strings = []
index = len(a_string)
while index:
index -= 1
new_strings.append(a_string[index])
return ''.join(new_strings)
第五種方法:使用字符串拼接(慢)
def string_reverse(a_string):
n = len(a_string)
x=""
for i in range(n-1,-1,-1):
x += test[i]
return x
第六種方法:使用reduce
reduce(lambda x,y : y+x, a_string)
第七種方法:使用遞歸(慢)****
def rev_string(s):
if len(s) == 1:
return s
return s[-1] + rev_string(s[:-1])
第八種方法:使用list() 和reverser()配合
a_string='123456789'
def rev_string(a_string):
l=list(a)
l.reverse()
return ''.join(l)
第九種方法:使用棧
def rev_string(a_string):
l = list(a_string) #模擬全部入棧
new_string = ""
while len(l)>0:
new_string += l.pop() #模擬出棧
return new_string