我正在尝试实现一个递归函数,遇到了一些困难,请您考虑。作为一个例子,让我们尝试创建一个名为sliding的函数来实现这一点

sliding("python", 2)
["py", "yt", "th", "ho", "on"]

也就是说,对于所选整数,我们沿着字符串滑动,获取适当长度的子字符串,然后将它们全部返回到列表中。
下面是我如何(愚蠢地)尝试递归地定义这个:
def sliding(string,k):
  return s if len(string)==k else [string[:k]].append(sliding(string[1:],k))

这不起作用,主要是因为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

这将导致
sliding("python",k=2)
['py', ['yt', ['th', ['ho', 'on']]]]

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

最佳答案

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

def sliding(s, k):
    if len(s) < k: return []
    else: return [s[:k]] + sliding(s[1:], k)

09-27 23:19