python递归建立列表

时间:2019-10-27 15:13:32

标签: python list recursion

假设我有一个字符串

S = "qwertyu"

我想使用递归建立一个列表,这样列表看起来像

L = [u, y, t, r, e, w, q]

我试图编写如下代码:

 def rec (S):
    if len(S) > 0:
        return [S[-1]].append(rec(S[0:-1]))

理想情况下,我想附加收缩字符串的最后一个元素,直到达到0 但我得到的输出都是None

我知道我做错了,并且我完全不知道当S的长度达到0时返回什么,请告诉我如何进行这项工作

(对不起,答案必须使用递归,否则不会打扰我)

非常感谢!!

4 个答案:

答案 0 :(得分:2)

有许多比使用递归更简单的方法,但这是一种递归的方法:

def rec (S):
    if not S:
        return []
    else:
        temp = list(S[-1])
        temp.extend(rec(S[:-1]))
        return temp

编辑:

请注意,基本情况可确保该函数还可以使用空字符串。我不得不使用temp,因为您不能返回list(S[-1]).extend(rec(S[:-1])),因为它是NoneType(它是方法调用而不是对象)。出于相同的原因,您不能分配给变量(因此,用temp分隔两行)。一种解决方法是使用+合并两个列表,就像Aryerez's answer中建议的那样(但是,我建议反对他的建议,以使那些使用复杂内衬的人印象深刻):

def rec (S):
    if not S:
        return []
    else:
        return list(S[-1]) + rec(S[:-1])

实际上,使用+可能更有效(尽管改进可能微不足道),有关更多详细信息,请参见this SO question的答案。

答案 1 :(得分:2)

这是最简单的解决方案:

def rec(S):
    if len(S) == 1:
        return S
    return S[-1] + rec(S[:-1])

或者单行,如果您真的想打动某人:)

def rec(S):
    return S if len(S) == 1 else S[-1] + rec(S[:-1])

答案 2 :(得分:0)

由于append更改了列表,因此很难递归表示。一种实现方法是使用单独的内部函数,该函数将当前L传递给下一个递归调用。

def rec(S):
    def go(S, L):
        if len(S) > 0:
            L.append(S[-1])
            return go(S[0:-1], L)
        else:
            return L
    return go(S, [])

答案 3 :(得分:-1)

    L = [i for i in S[::-1]]

应该可以。