列表功能意外动作

时间:2013-04-02 11:00:10

标签: python list function recursion

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

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

1
2
3
4

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

答案 2 :(得分:0)

为什么你希望程序在三点终止? 如果你说递归以3号打印输出停止,你就是对的,但此时原始列表仍未完全处理。如果你写下你的程序的步骤,它可以这样读:

  • 迭代可迭代[[1,2,3],4]
  • 中的所有元素
  • 第一项[1,2,3]是一个清单吗? - >是
  • 使用第一项调用print_list
    • 迭代[1,2,3]
    • 中的所有项目
    • 第一项是列表吗? - >否
    • print 1
    • 第二项是第2项吗? - >否
    • print 2
    • 第三项是第3项吗? - >否
    • print 3
    • 已达到列表末尾,请返回
  • 第二项是第4项吗? - >否
  • print 4