python内置数据结构之list

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python内置数据结构之list相关的知识,希望对你有一定的参考价值。

列表简单总结

  • 类和实例之间的理解

            人类,哺乳类
            实例是某一类中的真实个体
  • 时间复杂度

            O(1)
            O(n)
            O(n**2)
    
            随着处理的数据逐渐增加,程序返回结果的时间变化的描述.
                O(1)表示无论程序处理的数据如何增加,返回结果的时间是常数
                O(n)随着处理数据的数量n的增加,返回结果的时间线性增长n
                O(n)随着处理数据的数量n的增加,返回结果的时间指数级增长n**2
  • list,链表,queue,stack

            list: 有序的、紧密的可变序列
            链表: 手拉手的有序序列
            queue: 有序队列,常用于先进先出模型
            stack: 常用于后进先出的有序队列
  • 列表O(1)操作:

            append()
            extend()
            pop()
            insert() 
                插入方法插入时的时间是O(1),但导致其他元素的后移,所使用的时间更久.慎用.
  • 列表O(n)操作:

            count()
            index()
            remove()
            pop(index)
  • 列表复制:

            ==,内容,值比较
            is,内存地址比较,是否是同一对象
            = , 赋值,此赋值仅复制了对象的引用
            list.copy, 列表的第一次简单元素深复制,嵌套结构仅复制引用
            copy.deepcopy, 深复制,递归复制所有对象本身
    
            浅复制
                l1=l2
                l1=l2.copy()
            深复制
                l1=copy.deepcopy()
    
            示例;
                >>> l1=[1,2,3,[1]]
                >>> l1
                [1, 2, 3, [1]]
                >>> l2=l1             # 直接复制
                >>> l3=l1.copy()      # 使用列表方法复制
                >>> l1 
                [1, 2, 3, [1]]
                >>> l2
                [1, 2, 3, [1]]
                >>> l3
                [1, 2, 3, [1]]
                >>> l1[0]=100         # 修改第一层列表中元素
                >>> l1
                [100, 2, 3, [1]]
                >>> l2
                [100, 2, 3, [1]]
                >>> l3                # copy()复制的元素不变
                [1, 2, 3, [1]]
                >>> l1[-1][0]=100     # 修改嵌套在里面的列表中元素
                >>> l1
                [100, 2, 3, [100]]
                >>> l2
                [100, 2, 3, [100]]
                >>> l3                # l2,l3都被修改
                [1, 2, 3, [100]]
  • ==和is示例;

                >>> l1
                [1, 2, 3]
                >>> l2=l1
                >>> l3=l1.copy()
                >>> id(l1)
                140604879543624
                >>> id(l2)
                140604879543624
                >>> id(l3)              
                140604745250184
                >>> l1 == l2
                True
                >>> l1 == l3
                True
                >>> l1 is l2
                True
                >>> l1 is l3
                False
  • append()和extend()区别

            L.append(object) -> None
            L.extend(iterable) -> None
    
            append() 将对象附加至列表尾部
            extend() 将可迭代对象的元素附加至列表尾部
    
            >>> l1
            [1, 2, 3]
            >>> l2
            [‘a‘, ‘b‘, ‘c‘]
            >>> l1.append(l2)           # 将l2列表作为一个对象附加至列表l1
            >>> l1
            [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]]
            >>> l1.extend(l2)           # 将l2中的元素逐个附加至列表l2
            >>> l1
            [1, 2, 3, [‘a‘, ‘b‘, ‘c‘], ‘a‘, ‘b‘, ‘c‘]
  • [[0],[0],[0]] 和 0*n 区别

            >>> l1 = [[0],[0],[0]]    # 创建三个不同的对象
            >>> l1
            [[0], [0], [0]]
            >>> id(l1[0][0])          # 不同的内存地址
            8948000
            >>> id(l1[1][0])
            8947968
            >>> id(l2[0][0])         # 同一内存地址,也就是同一对象
            8948000
            >>> id(l2[1][0])
            8948000
            >>> l2 = [[0]]*3          # 创建三个同一对象
            >>> l2
            [[0], [0], [0]]
            >>> l1[0][0]=1
            >>> l1
            [[1], [0], [0]]
            >>> l2[0][0]=1
            >>> l2
            [[1], [1], [1]]

本文出自 “12064120” 博客,请务必保留此出处http://12074120.blog.51cto.com/12064120/1968034

以上是关于python内置数据结构之list的主要内容,如果未能解决你的问题,请参考以下文章

python中的list和array的不同之处

Python学习系列之内置函数

python基本数据类型之列表和元组

Python数据结构之列表类型(list)

Python之列表(list)

Python内置数据类型list各方法的性能测试