0
def print_list(l):
    for item in l:
        if isinstance(item, list):
            print_list(item)
        else:
            print(item)

我已经编写了这个函数,它使用递归来正确打印列表,但我的问题是,当我给它一个参数时,[[1, 2, 3], 4]根据我的说法,它应该在显示后终止,3但它仍然正确显示所有 4 个值是什么原因,有人能启发我吗.

4

3 回答 3

4

我认为您误解了递归。

外部列表有两项,一项是列表,一项是数字 4。该print_list()函数print_list()再次调用以打印内部列表,然后调用print(4)第二个元素。

所以,这就是发生的事情:

  1. print_list([[1, 2, 3], 4])-> 循环 2 个项目

    1. print_list([1, 2, 3])-> 循环 3 个项目

      1. print(1)
      2. print(2)
      3. print(3)

    2. print(4)

于 2013-04-02T11:02:29.863 回答
0

当我尝试你的功能时,我得到了

1
2
3
4

作为输出。这正是您所期望的,因为您的函数首先进入递归,循环遍历[1, 2, 3]. 这打印13. 然后递归结束,返回到原始调用,打印外部列表中的第二个元素,即4.

于 2013-04-02T11:09:06.173 回答
0

你为什么希望程序在三点结束?如果您说递归停止并打印出数字 3,那么您是对的,但此时原始列表仍未完全处理。如果你写下你的程序的步骤,它可能是这样的:

  • 迭代可迭代 [[1, 2, 3], 4] 中的所有元素
  • 第一项 [1, 2, 3] 是列表吗?-> 是的
  • 使用第一项调用 print_list
    • 遍历 [1, 2, 3] 中的所有项目
    • 第一项是列表吗?-> 没有
    • 打印 1
    • 第二项 2 是列表吗?-> 没有
    • 打印 2
    • 第三项 3 是列表吗?-> 没有
    • 打印 3
    • 已到达列表末尾,请返回
  • 第二项 4 是列表吗?-> 没有
  • 打印 4
于 2013-04-02T11:13:32.033 回答