【问题标题】:Why the insert method of list does not work correctly in my recursion?为什么 list 的 insert 方法在我的递归中不能正常工作?
【发布时间】: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,但您从未维护对该新列表的引用,因此它被丢弃

标签: python recursion insert


【解决方案1】:

这一行在这里

my_rev1(head).insert(0, tail)

是问题所在。调用my_rev1 的结果没有存储在任何地方。

所以你需要这样的东西:

rev_head = my_rev1(head)
rev_head.insert(0, tail)
return rev_head

【讨论】:

  • 我同意。谢谢金博!
猜你喜欢
  • 2013-05-21
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
相关资源
最近更新 更多