Python 反向列表递归,仅使用



我只使用以下函数使用递归反转列表时遇到问题:

def head(xs):
    return xs[0]
def tail(xs):
    return xs[1:]
def empty(xs):
    return len(xs) == 0

我可以这样做:

def p(xs1, xs2):
    if not empty(tail(xs1)):
        p(tail(xs1), xs2)
    xs2.append(head(xs1))
def p05(xs):
    s = []
    p(xs, s)
    return s

有没有办法在不使用 append()的情况下做到这一点?

def head(xs):
    return xs[0]
def tail(xs):
    return xs[1:]
def empty(xs):
    return len(xs) == 0
def reverse(xs):
    if empty(xs): return []
    return reverse(tail(xs))+[head(xs)]
xs = range(4)
print(reverse(xs))

收益 率

[3, 2, 1, 0]

您可以避免就地更改列表,而是返回一个新列表:

def p(xs1, xs2):
    if not empty(tail(xs1)):
        xs2 = p(tail(xs1), xs2)
    return xs2 + [head(xs1)]
def p05(xs):
    return p(xs, [])

您可能还应该更改head()以返回列表:

def head(xs):
    return xs[:1]
def tail(xs):
    return xs[1:]

并且不需要"空"; []被认为是在 python 上下文中False的。然后p()变成:

def p(xs1, xs2):
    if tail(xs1):
        xs2 = p(tail(xs1), xs2)
    return xs2 + head(xs1)

示范:

>>> p(range(5), [])
[4, 3, 2, 1, 0]

相关内容

  • 没有找到相关文章

最新更新