Python2.7字符串反转

Python2.7字符串反转,python,python-2.7,Python,Python 2.7,如果我需要自己在Python2.7中实现字符串反转,而不是使用系统库,我想知道是否有更有效的解决方案?我尝试过在很长的字符串(例如几千个字符)中缓慢运行代码。谢谢 对于字符串反转,我的意思是,例如,给定s=“hello”,返回“olleh” 问候,, Lin尝试递归 def reverse(str): if str == "": return str else: return reverse(str[1:]) + str[0] 试试这个: def

如果我需要自己在Python2.7中实现字符串反转,而不是使用系统库,我想知道是否有更有效的解决方案?我尝试过在很长的字符串(例如几千个字符)中缓慢运行代码。谢谢

对于字符串反转,我的意思是,例如,给定s=“hello”,返回“olleh”

问候,, Lin

尝试递归

def reverse(str):
    if str == "":
        return str
    else:
        return reverse(str[1:]) + str[0]
试试这个:

def reverseString(self, s):
    return s[::-1]
编辑:事实上,我错了 我做了一个粗略的测试,比较了这两个函数,复杂度看起来是一样的:线性的

似乎从Python2.4开始,对于CPython,已经有了避免二次行为的优化。请参见以下对类似问题的回答:

我下面所说的对于Python 2.7来说已经过时了。

这将是O(n^2),因为字符串在Python中是不可变的,所以:

result += s[i]
将在循环中的每次迭代中接触结果字符串中的ever元素。建立单个字符的可变容器(例如列表)并在末尾加入“”会更快

def reverseString(s):
    """
    :type s: str
    :rtype: str
    """
    if not s:
        return ''
    result = []
    for i in xrange(len(s)-1,-1,-1):
        result.append(s[i])
    return "".join(result)

我知道这就是为什么你要在python中避免显式循环的原因。我很好奇为什么你需要自己实现它,你的原因是什么?当你说慢的时候,你的意思是多慢?我获得了50000个长度字符串(不到四分之一秒)的合理性能。此外,尝试使用
xrange
而不是
range
是否有人尝试过生成器?这可能会非常慢,具体取决于字符串的大小,并且可能最终会打破最大递归限制,因为输入可能有数千个字符长。@shuttle87,同意您的意见。:)感谢juanpa.arrivillaga,您的解决方案非常酷,我认为我的代码的问题是在执行
result+=s[I]
时,将创建一个新字符串,而不是附加到现有字符串,因为Python str对象是常量?@LinMa最具Python风格的解决方案是使用切片表示法(
string[:-1]
)但是我不确定你在做这个功能时对自己有什么限制。如果使用
reversed
是“作弊”,那么切片表示法也可能是。感谢所有的帮助juanpa.arrivillaga,将您的回复标记为答案。感谢Ian,您的解决方案非常酷,我认为我的代码的问题是在执行
result+=s[I]
时,将创建一个新字符串,而不是附加到现有字符串上,因为Python str对象是常量?可能吗?为什么不完全“ol”双冒号一行。。。永恒的Python经典。
def reverseString(s):
    """
    :type s: str
    :rtype: str
    """
    if not s:
        return ''
    result = []
    for i in xrange(len(s)-1,-1,-1):
        result.append(s[i])
    return "".join(result)