python递归函数调用

kee*_*gan 3 python recursion

我正在尝试实现一个递归函数并遇到一些困难,会很感激你的想法.作为一个例子,让我们尝试创建一个调用的函数sliding,这是否

sliding("python", 2)
["py", "yt", "th", "ho", "on"]
Run Code Online (Sandbox Code Playgroud)

也就是说,对于所选择的整数,我们沿着字符串滑动,抓取适当长度的子串,然后将它们全部返回到列表中.

现在,我可以(愚蠢地)尝试以递归方式定义此方法:

def sliding(string,k):
  return s if len(string)==k else [string[:k]].append(sliding(string[1:],k))
Run Code Online (Sandbox Code Playgroud)

这将工作,主要是因为list.append()在地方发生,并返回None.所以我的问题是 - 有没有办法做这种递归函数,即使有很多Python方法到位?

这是我迄今为止最好的,

def sliding(s,k):
    if len(s)==k:
        return s
    else:
        temp = [s[:k]]
        temp.append(sliding(s[1:],k) ) 
        return temp
Run Code Online (Sandbox Code Playgroud)

这导致了

sliding("python",k=2)
['py', ['yt', ['th', ['ho', 'on']]]]
Run Code Online (Sandbox Code Playgroud)

这显然不是理想的输出,但是方向正确.还有什么其他方法可以做到这一点?谢谢你的想法.

Nay*_*uki 5

使用+运算符获取新的连接列表:

def sliding(s, k):
    if len(s) < k: return []
    else: return [s[:k]] + sliding(s[1:], k)
Run Code Online (Sandbox Code Playgroud)