繁体   English   中英

python 递归构建列表

[英]python build a list recursively

假设我有一个字符串

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]))

理想情况下,我想 append 缩小字符串的最后一个元素,直到它达到 0 但我得到的所有 output 是 None

我知道我做的不对,我完全不知道当 S 的长度达到 0 时要返回什么,请告诉我如何使这项工作

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

非常感谢!!!

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

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

编辑:

请注意,基本情况确保 function 也适用于空字符串。 我不得不使用temp ,因为你不能返回list(S[-1]).extend(rec(S[:-1]))因为它是一个NoneType (它是一个方法调用而不是一个对象)。 出于同样的原因,您不能分配给变量(因此有两个单独的行带有temp )。 一种解决方法是使用+连接两个列表,就像在Aryerez 的回答中所建议的那样(但是,我建议反对他的建议,试图用令人费解的一个衬里给人们留下深刻印象):

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

事实上,使用+可能更有效(尽管改进很可能可以忽略不计),有关更多详细信息,请参阅此 SO 问题的答案。

这是最简单的解决方案:

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])

由于append改变了列表,这有点难以递归表达。 一种方法是使用单独的内部 function 将当前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, [])
    L = [i for i in S[::-1]]

它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM