你能想到几种?
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