1

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

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
4

2 回答 2

1

添加到字符串很慢。最好以相反的顺序列出字符串中的字符,然后对其使用 string 方法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)
于 2013-10-11T20:04:38.987 回答
1

我喜欢函数式递归方式,但这对于 Python 来说可能不是最好的:

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

您可能希望包括类型检查或其他内容,或者可能对其进行一些扩展以处理任何可迭代的,而不仅仅是字符串。

于 2013-10-11T20:14:38.597 回答