Python实现字符串反转的几种方法

你能想到几种?

1. 使用字符串切片

1
2
3
4
>>> s = 'abcdefg'
>>> ans = s[::-1]
>>> ans
'gfedcba'

2. 使用列表的reverse方法

1
2
3
4
5
6
7
8
9
>>> l = list(s)
>>> l
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> l.reverse()
>>> l
['g', 'f', 'e', 'd', 'c', 'b', 'a']
>>> ans = ''.join(l[::1])
>>> ans
'gfedcba'

同理,可以用''.join(l[::-1])

1
2
3
4
5
6
>>> l = list(s)
>>> l
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> ans = ''.join(l[::-1])
>>> ans
'gfedcba'

3. 使用reduce

1
2
3
4
5
>>> from functools import reduce
>>> s = 'abcdefg'
>>> ans = reduce(lambda x,y:y+x, s)
>>> ans
'gfedcba'

在这里简单复习一下reduce
使用reduce需要先from functools import reduce
reduce有2个参数,一个是函数,另一个是可迭代对象。在这里的函数是匿名函数lambda,作用是输入x和y返回y+x,可迭代对象是字符串'abcdefg'
具体过程是x = 'a', y = 'b'返回'ba',之后'x = 'ba', y = c返回'cba'这样迭代完整个字符串就可以达到反转字符串的效果。

4. 使用递归函数

1
2
3
4
5
6
7
def func(s):
if len(s) == 1:
return s
return func(s[1:]) + s[0]

s = 'abcdefg'
print(func(s))

5. 使用栈

1
2
3
4
5
6
7
8
9
10
11
def func(s):
#模拟全部字符入栈
l = list(s)
ans = ''
while len(l)>0:
#模拟出栈
ans += l.pop()
return ans

s = 'abcdefg'
print(func(s))

6. for循环

1
2
3
4
5
6
7
8
9
def func(s):
ans = ''
max_index = len(s) - 1
for index, value in enumerate(s):
ans += s[max_index-index]
return ans

s = 'abcdefg'
print(func(s))

简单学习一下enumerate,它是python中的内置函数,适用于python2.x和python3.x
enumerate在字典里是枚举、列举的意思
enumerate参数为可遍历/可迭代的对象(如列表、字符串等)
例如:

1
2
3
4
5
6
7
8
9
10
11
>>> l = [1,2,3,4,5,6]
>>> for index, value in enumerate(l):
... print('%s, %s' % (index, value))
...
0, 1
1, 2
2, 3
3, 4
4, 5
5, 6
>>>

转自https://www.cnblogs.com/taceywong/p/8045127.html

LeetCode DAY 3 (5) LeetCode DAY 2 (4)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×