我在仅使用以下函数使用递归反转列表时遇到问题:
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 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:]
不需要“empty”;在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]