这个函数(function,list,in,isinstance)怎么通俗解释?

How to explain in layman's terms for this function (function, list, in and isinstance)?

我遇到了这个函数:

 def count_list(l):          
      count = 0          
      for e in l:               
           if isinstance(e, list):                    
                count = count + 1 + count_list(e)                    
      return count

特别是for e in 1isinstance(e, list)我都看不懂,请问有哪位高手能解释一下吗?刚开始学习函数,listinisinstance

我们来读一读:

# define the method count_list that take one argument l (lower L)
def count_list(l):
    # define count to be a int with value 0
    count = 0
    # for each item e in l (we supose that l can be itered)
    for e in l:
        # if e is a list
        if isinstance(e, list):
            # add one to count and the result of count_list called on e (recursive call)
            count = count + 1 + count_list(e)                    
    return count

备注:

  • 如果 e 不是列表 count 则不会更改。仅当在 l.
  • 中找到列表时,此方法才将 count 递增 1
  • 它还会增加列表中该列表中的列表数。
  • 最后它 returns l 中嵌套列表的数量。对于它遇到的每个列表,它使用递归调用添加 1+number of list in that list

示例:

此处表示l的内容:

  • 元素
  • 列表A
    • 元素
    • 元素
    • 名单B
      • 元素
      • 元素
    • 列表C
      • 元素
  • 元素

当我们调用 count_list(l) 时会发生什么:

  • count_list 使用参数 l 调用(调用 1)。
  • 迭代l的元素。
  • 元素ListA是一个列表。 count(在调用 1 中)递增 1,并且使用参数 ListA.
  • 调用 count_list 的结果
  • count_list 使用参数 ListA 调用(调用 2)。
    • 迭代ListA的元素。
    • 元素ListB是一个列表。 count(在调用 2 中)递增 1,并且使用参数 ListB 调用 count_list 的结果。
      • count_list 使用参数 ListB 调用(调用 3)。
      • 迭代ListB的元素。
      • 未找到列表 0 已返回(调用 3)
    • count(在调用 2 中)值是 0+1+0 的结果。这是 1.
    • 元素ListC是一个列表。 count(在调用 2 中)递增 1,并且使用参数 ListC 调用 count_list 的结果。
      • count_list 使用参数 ListC 调用(调用 4)。
      • 迭代ListC的元素。
      • 未找到列表 0 已返回(调用 4)
    • count(在调用 2 中)值是 1+1+0 的结果。这是 2.
    • ListA 中没有列表。
    • 2 返回(调用 2)
  • count(在调用 1 中)值是 0+1+2 的结果。这是 3.
  • l 中没有列表。
  • 3 返回(调用 1)

Python 变量是 "dynamic",这意味着传入参数 l(即小写 L)不一定具有特定类型。它可以是一个整数,或者一个字符串,或者一个列表等。

在这种情况下,如果恰好是一个列表,for 循环将遍历该列表的每个元素。循环检查加载到变量 e 的列表中的每个元素是否也是列表的一个实例。如果为真,它会将变量 count 递增 1 并回调到函数 count_list 以计算该列表的大小并添加到 count

调用你所在的函数就是所谓的递归函数,所以这就是你在这里所拥有的。

一般的想法似乎是这个函数试图计算嵌套列表中元素的总数。

您可以在调试器中尝试一下(PyCharm 很棒 IDE),看看它究竟是如何工作的。尝试这样调用您的函数:

count_list([1,2,3,[1,2,3,[1,2],4],4,5,6])