作家
登录

深入Python列表的内部实现

作者: 来源: 2017-05-24 17:19:01 阅读 我要评论

is not less than 8/2 so no shrinkage 
  •  
  •     set list object size to 4 
  •  
  •     return last element  
  • 列表 pop 操作的平均复杂度为 O(1)。

    可以看到 pop 操作后槽空间 4 依然指向本来的┞符数对象,然则最为关键的是如今列表的大年夜小已经变为 4。

    持续 pop 一个元素。在 list_resize() 函数中,size – 1 = 4 – 1 = 3 已经小于所分派的槽空间大年夜小的一半,所以缩减分派的槽空间为 6,同时如今列表的大年夜小为 3。

    可以看到槽空间 3 和 4 依然指向本来的┞符数,然则如今列表的大年夜小已经变为 3。

    Remove 操作

    Python 的列表对象有个办法,删除指定的元素: l.remove(5)。底层调用 listremove() 函数。

    1. arguments: list object, element to remove 
    2.  
    3. returns none if OK, null if not 
    4.  
    5. listremove: 
    6.  
    7.     loop through each list element: 
    8.  
    9.         if correct element: 
    10.  
    11.             slice list between element's slot and element's slot + 1 
    12.  
    13.             return none 
    14.  
    15.     return null  

    为了做列表的切片并且删除元素,调用了 list_ass_slice() 函数,它的实现办法比较有趣。我们在删除列表地位 1 的元素 5 的时刻,低位的偏移量为 1 同时高位的偏移量为 2.

    1. arguments: list object, new size 
    2.  
    3. returns: 0 if OK, -1 if not 
    4.  
    5. list_resize: 
    6.  
    7.     new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6) = 3 
    8.  
    9.     new_allocated += newsize = 3 + 1 = 4 
    10.  
    11.     resize ob_item (list of pointers) to size new_allocated 
    12.  
    13.     return 0  
    1. arguments: list object, low offset, high offset 
    2.  
    3. returns: 0 if OK 
    4.  

        推荐阅读

        Python爬虫爬取知乎小结

      比来进修了一点收集爬虫,并实现了应用Python来爬取知乎的一些功能,这里做一个小的总结。收集爬虫是指经由过程必定的规矩主动的大年夜网上抓取一些信息的法度榜样或脚本。我们知道机械进>>>详细阅读


      本文标题:深入Python列表的内部实现

      地址:http://www.17bianji.com/lsqh/35408.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)