所以基本上我在理解这两个概念上有困难。我用谷歌搜索了两天,用这两个人给自己画了一张图,但我还是觉得我并不是真的什么都懂。据我所知,如果你需要处理多级列表,isinstance被用作递归的基础,它返回true或false取决于元素?属于上述类型。问题是,我知道它的定义,但我无法让自己真正理解它是如何工作的,以便实际使用它。我想我应该放一个示例代码,也许你们中的一些人可以详细地解释这个函数是如何工作的。这就是它:
def first_and_last(a):
if not (isinstance(a,list)):
return a
elif a == []:
return []
else:
return [first_and_last(a[0]), first_and_last(a[-1])]
print(first_and_last([[1, 2, 3, [3, 3, 4, 5]], 6, 7, 7]))基本上,该代码是由教师共享的代码,但代码的思想是返回列表的每个级别的第一个和最后一个元素。
发布于 2014-01-27 22:26:49
只需在此处绘制出递归:
first_and_last([[1, 2, 3, [3, 3, 4, 5]], 6, 7, 7])
a is a list and not equal to []
first_and_last([1, 2, 3, [3, 3, 4, 5]])
a is a list and not equal to []
first_and_last(1)
a is not a list
return 1
first_and_last([3, 3, 4, 5])
a is a list and not equal to []
first_and_last(3)
a is not a list
return 3
first_and_last(5)
a is not a list
return 5
return [3, 5]
return [1, [3, 5]]
first_and_last(7)
a is not a list
return 7
return [[1, [3, 5]], 7]所以当调用中传入的值不是列表时,使用isinstance()来终止递归调用树。
发布于 2014-01-27 22:33:38
isinstance用于不断调用first_and_last,因为您可以更深入地了解嵌套列表。考虑前几个调用:在第一个调用中,列表是a[0]:[1,2,3[3,3,4,5]],但是在下一个调用中,a[0]是一个整数1。不能嵌套到整数中,isinstance是用来检测您是否达到了"list of list of list...“中的”原始“列表元素级别的条件。层次结构。因为您总是访问list的第一个(a[0])或最后一个(a[-1])元素,所以它不是list这一事实意味着它是您想要返回的东西( list的第一个或最后一个元素,前提是它不是一个内部list)。
第二个条件防止在空列表上调用a[0]和a[-1]。如果输入参数中包含一个空列表,这将立即返回它,而不会尝试处理它不存在的元素。
https://stackoverflow.com/questions/21383250
复制相似问题