1. 程式人生 > >python內置數據結構之list

python內置數據結構之list

list python

列表簡單總結

  • 類和實例之間的理解

            人類,哺乳類
            實例是某一類中的真實個體
  • 時間復雜度

            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