Python的str对象没有内置的反向函数。实施此方法的最佳方式是什么?

如果提供一个非常简洁的答案,请详细说明其效率。例如,str对象是否转换为其他对象等。


当前回答

作为一种不同的解决方案(因为面试中会问到):

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

其他回答

使用切片:

>>> 'hello world'[::-1]
'dlrow olleh'

切片符号采用[start:stop:step]的形式。在这种情况下,我们省略了开始和停止位置,因为我们需要整个字符串。我们还使用step=-1,意思是“从右到左重复一个字符”。

def reverse(input):
    return reduce(lambda x,y : y+x, input)

@保罗的s[::-1]是最快的;较慢的方法(可能更可读,但这是有争议的)是“”.join(颠倒)。

这也是一种有趣的方式:

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'

一个不那么令人困惑的方法是:

string = 'happy'
print(string)

“快乐”

string_reversed = string[-1::-1]
print(string_reversed)

'伊帕'

英语[-1::-1]如下:

“从-1开始,一直走,采取-1的步骤”