Python学习札记(1)——Python的数据结构(序列)

  1. 相关知识的介绍python

    1.1 序列的类型数据结构

    序列是Python最基本的数据结构。app

    python有6种内建序列:列表、元组、字符串、unicode字符串、buffer对象和xrange对象。函数

    序列能够插入、删除、替换而且全部序列都支持迭代。spa

    1.2 索引code

    索引能够理解为序列里每个元素的标号,从0开始,以-1结束,对象

    也就是说第一个元素的索引是0,而最后一个元素的索引是-1,排序

    如c='2011',c[0]=2,c[1]=0,c[2]=1,c[-1]=1。索引

    1.3 分片队列

    使用分片,访问必定范围内的元素。分片经过冒号相隔的两个索引实现。

    如:c='Python',当要输出tho时能够编写如:print c[2:5],即输出从索引为二到索引为五的全部元素

    将c所有输出,能够编写为:print c[0:len(c)]或者print c[:]

    输出最后三位能够编写为:print c[:-3]

    输出前三位能够编写为:print c[:3]或print c[-3:]

    但print c[0:-1]或者print c[0:-2]等没法输出所有字符。

    由于[前索引:后索引)输出从前索引开始到后索引以前结束,不包括后索引自己所指的元素


    1.4 步长

    当咱们要跳跃式的输出元素时,咱们可使用步长。

    步长默认值为1,能够为负数(步长为负数时将倒序输出),但不能为0!
    若是更改步长则在两个索引后用冒号分隔:如[前索引:后索引:步长]
    如:mynumber = [1,2,3,4,5,6,7,8,9,10]
          mynumber[::4] =》 [1,5,9]                       #步长为4,隔3个元素输出第四个元素
          mynumber[8:3:-1] =》 [9,8,7,6,5]            #从第8个元素倒序到第4个元素
          mynumber[0:10:-2] =》 []                       #0比10在序列中更早出现,因此无输出
          mynumber[::-2] =》 [10,8,6,4,2]              #倒序输出
          mynumber[5::-2] =》[6,4,2]
          mynumber[:5:-2] =》[10,8]

    1.5 相加

    同类型的能够相加,不一样类型的不能够相加

    1.6 相乘

    1.7 None、空列表和初始化

    None是python的内建值,表示为空(相似于c的null)
    若是想创建一个长度必定的空列表能够:[None]*n

    1.8 成员资格

    判断一个值是否在序列中,使用in运算符,若是存在返回True,不然返回False

  2. 列表

    2.1 列表的建立

    list(‘Hello’);//list函数用于建立一个列表,能够由其它类型序列建立,如例子中由字符串建立列表。

    或:shoplist=['apple','banana','carrot','pear','grape']

    2.2 列表元素赋值

    用索引能够改变该索引所在的列表元素的值。

    如:numberlist[2] =  100

    2.3 列表元素删除

    使用del操做符能够删除列表中某个索引的元素。

    固然也能够分片删除,如del numberlist[2:3]或者numberlist[2:3] = []


    2.4 分片赋值

    numberlist = list('12345678');
    numberlist[1:4] = []; =》['1','5','6','7','8']//替换空元素,实现删除
    numberlist[1:1] = list('234'); =》['1','2','3','4','5','6','7','8']//使用相同的索引位置,能够在该位置实现插入
    numberlist[1:] = list('abc'); =》['1','a','b','c']//从某个索引位置开始替换到结尾

    2.5 绑定

    当我在用替换空元素来删除元素时,遇到了一个问题:

    为何事先将numberlist的值用 = 赋给olditem,在修改了numberlist后,olditem的值也一块儿被修改了呢?

    首先,咱们要清楚的是:

    当咱们建立一个对象并给它赋一个变量的时候,这个变量仅仅参考那个对象,

    而不是表示这个对象自己!也就是说,变量名指向你计算机中存储那个对象的内存

    这被称做名称到对象的绑定

    咱们能够试着证实。

    证实前,咱们得了解一个函数id(),函数id()的解释以下:

    那咱们能够看看不管是olditem仍是numberlist所指向的内存地址是否是同一个。

           

      如上图所示,olditem及numberlist指向的内存地址是同一个,

      这也就不难解释为何修改了numberlist的同时olditem也被修改了。

      那咱们如何将numberlist的值赋给olditem才能保证他们所指的不是同一个内存单元地址或者说

      当咱们该别numberlist的值时olditem的值保持不变呢?

      答案就是:得使用切片操做符来创建序列的拷贝!

        

      上图是否是很好的证实了列表的赋值语句建立拷贝。必须使用切片操做符来才能创建序列的拷贝?

      2.6 列表方法

      python中方法的概念:方法是与对象有紧密联系的函数。
      方法的调用方式:对象.方法(参数)
      列表的方法:

            (1)append用于列表尾追加元素。append方法直接修改原列表而不是返回一个新列表。
            (2)count方法用于统计某个元素出现测次数。
            (3)extend方法用于在列表尾追加另外一个列表(扩展)。list1.extend(list2),修改list1,list2不变。
            extend看起来像链接(+)操做,可是链接只会生成新的列表副本,而不会改变原有两个列表。
            用链接实现扩展(extend):a= a+b,虽然能够实现可是没有extend方法效率高。
            用分片替换实现扩展(extend):a[len(a):] = b;能够实现可是可读性很差。
            (4)index方法用于找出第一个与给定值匹配的元素的索引位置。若是没有该值则异常。
            (5)insert方法用于向列表中插入对象。对象.insert(插入位置,插入值);也能够用分片赋值实现插入。
            (6)pop方法用于删除列表中某一元素。默认删除最后一个元素。该方法返回被删除的元素的值。
            pop是惟一一个既能修改列表又返回元素值的列表方法。
            默认的append和pop方法结合使用能够实现栈的操做(LIFO)
            使用insert(0,...)和pop方法能够实现队列的操做(FIFO)
            (7)remove用于移除列表中的某个值的第一个匹配项。remove是一个没有返回值的原位置改变方法,
            它修改列表可是没有返回值。
            (8)reverse方法将列表中的方法反向存储。
            (9)sort方法用于在原位置对列表排序,原位置意味着改变列表而不是返回列表副本。(升序排列)
            注意sort没有返回值,若是当遇到想对某列表进行排序,可是又不想改变原列表的状况下,则须要
            以下操做:
            y = x[:];//将列表x复制给y   注意若是只简单的用y = x,实际上y和x仍是指向的同一个对象!
            y.sort();
            sorted函数能够生成一个列表的副本,sorted是函数不是方法,它能够用于任何序列,但返回值都为列表。
            高级排序:
            sort方法参数:1.能够指定排序比较函数,lst.sort(cmp);
            2.能够给每一个元素建立键,按照键排序,lst.sort(key = len);
            3.能够指定是否反向排序,lst.sort(reverse = True);

  3. 元组

    3.1 元组的基本介绍

        元组能够看做是元素值不能改变的列表。由于元素值 不能改变,因此元组没有方法。

        即便元组只有一个值也要用‘,’分开

        42 不是元组,(42)也不是元组,(42,)才是元组。

        3*(40+2)  =》126

        3*(40+2,) =》(42,42,42)

     3.2 tuple函数

        上面说的是元组没有方法,不是说元组没有函数!

         tuple函数将列表转换为元组.

       

     3.3 元组不可替代的缘由:

        (1)元组能够在映射中看成键使用,但列表不能够

        (2)元组做为不少内建函数和方法的返回值存在

相关文章
相关标签/搜索