追加列表中的 Python 递归

新手上路,请多包涵

我想递归地附加到一个列表,但我想不出一个有效的函数。该函数有两个参数 timesdatatimes 应该是附加数据的次数。

到目前为止,这是我的代码:

 def replicate_recur(times, data):
    result2 = []
    if times == 0:
        result2.append(data)
    else:
        result2.append(data)
        replicate_recur(times - 1, data)
    return result2

原文由 Nix 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 540
2 个回答

为了让你的代码工作,你需要 extend 当前执行中的列表和下一个递归调用的输出。此外,递归的最低深度应由 times = 1 定义:

 def replicate_recur(times, data):
    result2 = []
    if times == 1:
        result2.append(data)
    else:
        result2.append(data)
        result2.extend(replicate_recur(times - 1, data))
    return result2

另一方面,您可以简单地复制您的列表:

 def replicate(times, data):
    return [data]*times

原文由 Moses Koledoye 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用中间列表附加到每个递归调用中。这避免了您当前遇到的这些重新定义问题:

 def replicate_recur(times, data, result=None):
    if result is None:  # create a new result if no intermediate was given
        result = []
    if times == 1:
        result.append(data)
    else:
        result.append(data)
        replicate_recur(times - 1, data, result)  # also pass in the "result"
    return result

调用时:

 >>> replicate_recur(4, 2)
[2, 2, 2, 2]

原文由 MSeifert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题