zoukankan      html  css  js  c++  java
  • python日常-list and dict

    什么是list:

      list 觉得算是python日常编程中用的最多的python自带的数据结构了。但是python重的list跟其他语言中的并不相同。 

     少年..不知道你听说过python中的append方法比insert方法的效率高非常多呢?什么,你不知道?请容老衲慢慢道来。

     其他编程语言中list也叫链表,大抵就是除了最后一个元素外,所有元素的中都有一个指针,这个指针只想下一个元素节点的引用。

     如果你想添加元素的话 把最后一个元素里的指针指向你想要app元素即可,插入呢?嘿嘿 这个时候你只要把要插入元素之前的元素指向你想插入的元素,然后把你想插入的元素指向之前的元素即可。

     听起来不错是吧?
     其实用起来也不错!(当然这里指的是单向列表)

     而python是这么干的,他存放list结构是一整块内存,试想你买了一桶羽毛球的球 然后你想要取出倒数第二个,想想都是xxxxxx

    {但是这两中方法都是互有利弊的,链表的访问某一个元素的复杂度是线性的,也就是one by one的 ,而python中的list是一系列指向内存中value的指针,他可以把访问某一个元素的值的复杂度控制在对数级}

     具体到insert操作上面来,原则上来说,每一次insert操作都要移动其右边所有的元素,甚至有的时候还会重新建立一个新的内存空间。为了避免这样,通常会采用动态数组这个概念,核心是刚开始创建的时候,分配一个更大的内存

     听起来很扯,而且想想 这样让append跟insert的操作,变得很近似,但是实际上这样的行为的确能降低成本。

     我对于list的建议是,如果你有经常操作的,甚至操作量大的要求,那么放过list吧。

    什么?字太多了,那么看下代码吧?LOL

    思考一个问题?为什么L2会跟着L1改变呢?

     然后看看下面这个

    其实出现这两种情况的原因是----一切皆对象,我们可以说L1 L2 这两个本身是两个对象,而[1,2,3]也是一个对象,其实在内存中存名字跟存数据是两个不同的区间

    说的好像等于没说。。。。。。

    想想这样小明跟老王在同一间公司上班,公司老板发善心了,给员工修了个乒乓球台,那么是否可以这样说,小明跟老王的公司都有乒乓球呢?sure!!

    有一天小明辞职了,换了一家公司,而老王没有换,那么两个人肯定不在同一家公司啦。。。

    ----------------------------------------------------------------------------------------------------------------------------------------------

    看了上面对list的解答是不是感觉list弱爆了。。。。其实绝多数情况下list给了我们一个简单而且可用性非常高的数据结构,但是我们还是要说说dict

    关于dict你可能知道它是无序的,而且是以key,value方式存储数据的而且value也可以存储其他数据结构,你可以在字典里面在放n个字典,而且他们通过

    key找value是非常快++的,具体是通过散列法也叫哈希法完成的(),所以字典的长度是不重要的,他的查找速度是线性的 。。。是不是很厉害LOL

  • 相关阅读:
    java 原子性 可见性 有序性
    java中Array/List/Map/Object与Json互相转换详解(转载)
    观察者模式(转载)
    TCP协议
    “数字签名”与“数字证书”
    两道笔试题
    定时任务处理过程中的问题
    行数据库VS列数据库
    B树和B+树
    ThreadPoolTaskExecutor介绍
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/5628431.html
Copyright © 2011-2022 走看看