【发布时间】:2020-04-14 05:05:19
【问题描述】:
我正在尝试通过递归来反转列表
def my_rev1(data):
if len(data) == 0:
return []
else:
head = data[:-1]
tail = data[-1]
my_rev1(head).insert(0, tail) # does not work property
return head
def my_rev2(data):
if len(data) == 0:
return []
else:
head = data[:-1]
tail = data[-1]
return [tail] + my_rev2(head) # correct
print("my_rev1")
print(my_rev1([1]))
print(my_rev1([1, 2, 3]))
print("my_rev2")
print(my_rev2([1]))
print(my_rev2([1, 2, 3]))
输出是:
my_rev1
[]
[1, 2]
my_rev2
[1]
[3, 2, 1]
我想知道为什么第一个递归函数不正确? 2个函数有什么区别?
【问题讨论】:
-
因为
my_rev1(head).insert(0, tail)返回一个新列表,然后您在该列表上使用.insert,但您从未维护对该新列表的引用,因此它被丢弃