[英]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.