这个函数(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 1
和isinstance(e, list)
我都看不懂,请问有哪位高手能解释一下吗?刚开始学习函数,list
、in
和isinstance
我们来读一读:
# 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])
我遇到了这个函数:
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 1
和isinstance(e, list)
我都看不懂,请问有哪位高手能解释一下吗?刚开始学习函数,list
、in
和isinstance
我们来读一读:
# 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
. 中找到列表时,此方法才将 - 它还会增加列表中该列表中的列表数。
- 最后它 returns
l
中嵌套列表的数量。对于它遇到的每个列表,它使用递归调用添加1+number of list in that list
。
count
递增 1
示例:
此处表示l
的内容:
- 元素
- 列表A
- 元素
- 元素
- 名单B
- 元素
- 元素
- 列表C
- 元素
- 元素
当我们调用 count_list(l)
时会发生什么:
count_list
使用参数l
调用(调用 1)。- 迭代
l
的元素。 - 元素
ListA
是一个列表。count
(在调用 1 中)递增 1,并且使用参数ListA
. 调用 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)
count_list
的结果
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])