2013-10-11 24 views
1

我试图想出一种不使用[::-1]方法来执行反向字符串函数的方法。我是新来的编码,并试图只使用“原始”的步骤。以下是我的功能和规格。我想知道这是否是写函数的有效方法。我感谢任何帮助。谢谢!Python中的反向字符串函数(原始步骤)

def reverse(word): 
    x = -2      #word in reversed order counter 
    y = 1      #starts counter to end "while" statement below 
    reversed = word[-1]  #starts the reversed-word at last letter of word 
    while len(word) > y:  #ending parameter for when all letters run through loop 
     reversed += word[x] #adds letters to reversed word starting at word[-2] 
     x -= 1     #moves position in word 1 to the left 
     y += 1     #increases the counter by 1 
return reversed 
+7

不,这是严重的低效率,但没有理由自己编写真实的单词,所以... – Ryan

+0

追加字符串n次通常需要O(n2)时间,除非字符串实现执行适当的过度分配Python的字符串类型不)。所以不,这不是近乎有效的。 –

+5

一个更好的地方问这个将是codereview.stackoverflow.com –

回答

1

添加到字符串很慢。最好以相反顺序制作字符串中的字符列表,然后在其上使用字符串方法join

示例代码(相当接近原来的功能):

def reverse(word): 
    index = len(word)-1     
    result = []  
    while index >= 0: 
     result.append(word[index]) 
     index -= 1 
    return "".join(result) 

更好的例子代码:

def reverse(word): 
    word_list = [] 
    for i in range(len(word)-1, -1, -1): 
     word_list.append(word[i]) 
    return "".join(word_list) 

def reverse(word): 
    return "".join(word[i] for i in range(len(word)-1, -1, -1)) 

更妙的是代码:

def reverse(word): 
    return "".join(reversed("abc")) 

def reverse(word): 
    return word[::-1] 

但当然,最有效的代码是用最少的字符。 [/讽刺]

reverse =lambda s:s and s[-1]+reverse(s[:-1])or s 

又一解决方案(我认为这很可能是缓慢的):

def reverse(word): 
    word_list = [] 
    for i in word: 
     word_list.insert(0, word[i]) 
    return "".join(word_list) 
+0

@jeremyne​​albrown:阅读问题的第一句话。 – Ryan

+0

为什么不用'for word in word:word_list.append(c)...'? –

+0

谢谢。我正在使用append的想法,但后来我意识到它不适用于字符串。甚至不知道连接方法。 – craig

1

我喜欢的功能上下的递归的方式,但是这可能不是最好的Python :

def rev(w): 
    return rev(w[1:]) + w[0] if w else w 

你最好要包括的类型检查什么的,或者可能延长这个有点处理可迭代的,而不是只是一个字符串。

+0

不,这很好。如果你稍微扩展它来处理每一个迭代,你就会'倒过来':) – Ryan