首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解递归中的isinstance

了解递归中的isinstance
EN

Stack Overflow用户
提问于 2014-01-27 22:21:05
回答 2查看 426关注 0票数 0

所以基本上我在理解这两个概念上有困难。我用谷歌搜索了两天,用这两个人给自己画了一张图,但我还是觉得我并不是真的什么都懂。据我所知,如果你需要处理多级列表,isinstance被用作递归的基础,它返回true或false取决于元素?属于上述类型。问题是,我知道它的定义,但我无法让自己真正理解它是如何工作的,以便实际使用它。我想我应该放一个示例代码,也许你们中的一些人可以详细地解释这个函数是如何工作的。这就是它:

代码语言:javascript
复制
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]))

基本上,该代码是由教师共享的代码,但代码的思想是返回列表的每个级别的第一个和最后一个元素。

EN

回答 2

Stack Overflow用户

发布于 2014-01-27 22:26:49

只需在此处绘制出递归:

代码语言:javascript
复制
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()来终止递归调用树。

票数 3
EN

Stack Overflow用户

发布于 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]。如果输入参数中包含一个空列表,这将立即返回它,而不会尝试处理它不存在的元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21383250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档