Python的str对象没有内置的反向函数。实施此方法的最佳方式是什么?
如果提供一个非常简洁的答案,请详细说明其效率。例如,str对象是否转换为其他对象等。
Python的str对象没有内置的反向函数。实施此方法的最佳方式是什么?
如果提供一个非常简洁的答案,请详细说明其效率。例如,str对象是否转换为其他对象等。
当前回答
这也是一种有趣的方式:
def reverse_words_1(s):
rev = ''
for i in range(len(s)):
j = ~i # equivalent to j = -(i + 1)
rev += s[j]
return rev
或类似:
def reverse_words_2(s):
rev = ''
for i in reversed(range(len(s)):
rev += s[i]
return rev
另一种更“奇特”的方式使用支持.reverse()的字节数组
b = bytearray('Reverse this!', 'UTF-8')
b.reverse()
b.decode('UTF-8')`
将产生:
'!siht esreveR'
其他回答
1.使用切片表示法
def rev_string(s):
return s[::-1]
2.使用reversed()函数
def rev_string(s):
return ''.join(reversed(s))
3.使用递归
def rev_string(s):
if len(s) == 1:
return s
return s[-1] + rev_string(s[:-1])
在python中反转字符串,而不使用reversed()或[::-1]
def reverse(test):
n = len(test)
x=""
for i in range(n-1,-1,-1):
x += test[i]
return x
递归方法:
def reverse(s): return s[0] if len(s)==1 else s[len(s)-1] + reverse(s[0:len(s)-1])
例子:
print(reverse("Hello!")) #!olleH
使用切片:
>>> 'hello world'[::-1]
'dlrow olleh'
切片符号采用[start:stop:step]的形式。在这种情况下,我们省略了开始和停止位置,因为我们需要整个字符串。我们还使用step=-1,意思是“从右到左重复一个字符”。
作为一种不同的解决方案(因为面试中会问到):
def reverse_checker(string):
ns = ""
for h in range(1,len(string)+1):
ns += string[-h]
print(ns)
if ns == string:
return True
else:
return False