目录

1. 列表简介:

2. 列表的创建:

3. 列表的方法:

    3.1 增加、删除

     3.2 列表元素的访问

     3.3 slice切片截取

     3.4 列表的遍历、排序           

     3.5 多维列表


1. 列表简介:

     用来存储任意类型任意数量的数据集合
    内存分析:是一块连续的内存空间,列表中存放的是对象的地址,例如s=[1,'a'],该对象s指向了一块连续的内存空间,内存空间
    中存放的是对象1、对象‘a’的内存地址

2. 列表的创建:

    2.1 定义创建:
        list = [1,2,'s']
    2.2 list()创建,所有能够用来迭代的均可以用这种方式来创建
        list = list() #创建了一个空列表对象
        list = list('wuhengtao') #创建了一个列表对象,内容为w/u/h/e/n/g....
    2.3 range()转化为序列
        list = list(range(0,10,1)) #创建了一个从0到9的列表对象
    2.4 推导式创建列表
        list = [x * 2 for x in range(5)] #意思是,将X值×2,循环0-4的数值
        输出就是0、2、4、6、8
        联合判断语句:
        list = [x * 2 for x in range(100) if x % 9 == 0]
        

3. 列表的方法:

常用方法
    list.append(x)             增加元素     将元素X增加到列表的尾部
    list.extend(aList)         增加元素    将列表aList所有元素加到列表list尾部
    list.insert(index,x)    增加元素    在列表指定位置index处插入元素x
    list.remove(x)            删除元素    在列表中删除首次出现的元素x
    list.pop([index])        删除元素    删除并返回list指定位置index处的元素,默认是最后一个元素
    list.clear()            删除所有元素    但不删除列表对象
    list.index(x)            访问元素    返回第一个x的索引位置,如果不存在抛出异常
    list.count(x)            统计        统计x在列表中出现的次数
    len(list)                长度        返回列表中包含元素的个数/长度
    list.reverse()            翻转列表    将列表中的数据原地翻转 1,2,3,4 >>> 4,3,2,1
    list.sort()                排序        列表中的元素原地排序
    list.copy()                浅拷贝        返回列表的浅拷贝数据:
                                        (初步认识,可能不准确)
                                        浅拷贝:对于序列来说,浅拷贝只会拷贝第一层数据,也就是列表的对象对应的连续内存对空地址,并不会将连续内存空间上的具体每一个内存重新创建
                                        深拷贝:拷贝第一层数据的同时,还会拷贝内存空间中每一个内存地址进行重新创建
                                        EXP:
                                            list=[1,2,'a']
                                            #浅拷贝
                                            listCopy = copy.copy(list) #此时,listCopy是一个新对象,但是该对象[1,2,'a']中每一个对象的内存地址还是以前(list中)的
                                            #深拷贝
                                            listDeepCopy = copy.deepcopy(list) #此时,listDeepCopy是一个新对象,并且该对象中的每一个对象也都是新创建的对应了新的内存地址

    3.1 增加、删除

        在操作时,尽量不要在列表的中间进行增加和删除,尽量在尾部。因为列表的中间添加数据时,后面的数据会对内存进行挨个复制进行重新赋值。
        3.1.1 append():在列表的尾部添加元素,是效率最快,最推荐的方式(不会产生新对象)
            a = [10,20]
            a.append(30)
            a = [10,20,30]
        
        3.1.2 +:通过+来拼接列表,但是这种操作会产生很多赋值操作,不建议(产生了新对象)
            a=[10,20] # a是一个对象
            a = a + [30] # [30]又产生了一个对象,并且a+[30]又产生了一个新对象,最终赋值给a,a对象的地址已经发生了改变
            >>>[10,20,30]
        
        3.1.3 extend():原地操作,将目标列表的所有元素添加至本列表的尾部,不产生新对象,适用于两个列表拼接
            a=[10,20]
            a.extend([50,60])
            >>>[10,20,50,60]
        3.1.4 insert():在列表的指定位置插入元素,设计大量列表操作时,尽量避免使用,因为设计到很多赋值操作
            a=[10,20,30]
            a.insert(1,100)
            >>>[10,100,20,30]
        3.1.5 乘法扩展
            a=[10]
            b = a * 3
            >>>b=[10,10,10]
        3.1.6 del删除:实际上是将后面的下标复制然后移动位置
            a=[1,2,5,3,4]
            del a[2]
            >>>[1,2,3,4]
        3.1.7 pop():删除指定位置的元素,并将该元素返回,如果没有指定,默认删除最后一个元素
            a=[10,20,30,40]
            b=a.pop()  #此时b=40 a=[10,20,30]
            c=a.pop(1) #此时指定删除下标为1的元素,c=20, a=[10,30]
        3.1.8 remove(),删除首次出现的制定元素,不是下标,如果不存在则刨出异常
            a=[10,20,30,410]
            a.remove(410) #删除410这个元素

     3.2 列表元素的访问

  对于一个列表元素,我们时常需要进行访问来完成各种操作。

       a = [1,2,3,4,5,6,7,8,9]

       3.2.1 通过下标访问:a[1]=2:访问列表中第二个元素,但是下标不能超过列表长度,否则会抛出异常

       3.2.2 index(): 

                 a.index(5)=4  在列表a中搜索5的首次出现的位置

                 a.index(5,2,8)=4 范围搜索列表a中从第二个元素开始到第八个元素结束,5出现的位置

        3.2.3 count()

                 返回指定元素在列表中出现的次数

                a.count(5)=1   表示5这个元素在列表a中出现了一次

        3.2.4 len()

                返回列表的长度:len(a)=10  表示列表a一共有十个元素

        3.2.5 成员资格判断

                 判断20在列表a中是否存在  20 in a  >>>false

     3.3 slice切片截取

                语法:[start:end:step] --- [开始下标:结束下标:步长]

                注意:截取的结尾下标是不被包含的,即包头不包尾 

                EXP:a=[1,2,3,4,5,6,7]

               a[1,5,1]=[2,3,4,5] 意思是从下标为1开始截取到下标为5的,步长为1

               a[1::2]=[2,4,6]  意思是从第二个开始到结束,步长为2

     3.4 列表的遍历、排序           

for x in a:
                  print(x)

            排序:a.sort(),即可完成让列表a正序排序并且不会生成新对象

                       a = sorted(a) 这是生成新对象并且完成排序

                       max(a)/min(a)/sum(a) 最大值、最小值、求和(适用于元素类型均为整数时)

     3.5 多维列表

            概念:多维列表就是列表里面的元素也是列表,EXM:table=[1,2,3,[10,20,30],['A','B']]

           可以通过下标的方式进行访问:table[3][0]=10,意思就是访问的table列表的第四个下标值的第0个下标值