为什么我的python函数返回多个括号?

The*_*oxx 0 python recursion brackets

我有点像python的菜鸟,但我正在尝试创建一个递归函数,就像内置范围函数一样:

def Range (lo, hi):
    if lo >= hi:
        return []
    else:
        return [lo, Range (lo+1,hi)]
Run Code Online (Sandbox Code Playgroud)

但它返回多个列表.

而不是[3,4,5,6],这就是我想要的,它的归还[3,[4,[5,[6,[]]]]] 为什么是这个以及如何解决它?

Sea*_*ira 5

当你这样递归时,Range每次都返回一个列表:

Range(3,7)
# translates to
[3, Range(4,7)]
# which translates to
[3, [4, Range(5,7)]]
# etc.
Run Code Online (Sandbox Code Playgroud)

为了避免这种情况,请将您的列表添加到一起:

def Range (lo, hi):
    if lo >= hi:
        return []
    else:
        return [lo] + Range(lo+1, hi)
Run Code Online (Sandbox Code Playgroud)

编辑:

作为@delnan指出,这个功能是非常低效的-它没有尾巴调用优化语言都递归* 它产生两个(可能是3递归的每个级别)的新名单.@ mipadi的答案更高效,因为它只创建一个列表(accaccumulator参数)并在递归时传递它.

*对于Python语言可能不是这样,但我99%肯定对于最常见的Python实现,即CPython.