python內置數據結構之list
阿新 • • 發佈:2017-09-24
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