python — 列表与元组
1.列表和元組的基礎
列表和元組都是一個可以放置任意數據類型的有序合集。(在絕大多數編程語言中,集合的數據類型必須一致。不過,對于python的列表和元組來說,并無此要求)
2.列表與元組的區別
1)列表是動態的,長度大小不固定,可以隨意的增加、刪減或者改變元素。
2)元組是靜態的,長度大小固定,無法增加、刪減或者改變。
3.列表和元組的基本操作和注意事項
1)首先,和其他語言不同,Python中的列表和元組都支持負數索引,-1表示最后一個元素,-2表示倒數第二個元素,以此類推。
2)列表和元組都支持切邊操作
3)列表和元組都可以隨意嵌套
4)兩者可以通過list()和tuple()函數相互轉換:
list((1,2.3)) #[1,2.3] tuple([1,2,3]) #(1,2,3)5)列表和元組常用的內置函數:
l = [3,2,3,7,8,1] l.count(3) #2; count(item)表示統計列表/元組中item出現的次數。 l.index(7) #3; index(item)表示返回列表/元組中item第一次出現的索引 l.reverse() #[1,8,7,3,2,3]; list.resverse()表示原地倒轉列表 l.sort() #[1,2,3,3,7,8]; list.sort()表示列表排序(注意元組沒有內置這兩個函數)列表和元組存儲方式的差異
l = [1,2,3] print(l.__sizeof__()) #64 tup = (1,2,3) print(tup.__sizeof__()) #48對列表和元組,我們放置了相同的元素,但是元素的存儲空間,卻比列表要少16字節。
由于列表是動態的,所以它需要存儲指針,來指向對應的元素(上述例子中,對于int型,8字節)。另外,由于列表可變,所以需要額外存儲已經分配的長度大小(8字節),這樣才可以實時追蹤列表空間的使用情況。當空間不足時,及時分配額外空間。
l = [] l.__sizeof__() // 空列表的存儲空間為 40 字節 40 l.append(1) l.__sizeof__() 72 // 加入了元素 1 之后,列表為其分配了可以存儲 4 個元素的空間 (72 - 40)/8 = 4 l.append(2) l.__sizeof__() 72 // 由于之前分配了空間,所以加入元素 2,列表空間不變 l.append(3) l.__sizeof__() 72 // 同上 l.append(4) l.__sizeof__() 72 // 同上 l.append(5) l.__sizeof__() 104 // 加入元素 5 之后,列表的空間不足,所以又額外分配了可以存儲 4 個元素的空間上面的例子,大概描述了列表空間分配的過程。我們可以看到,為了減少每次增加/刪除操作時空間分配的開銷,Python每次分配空間時都會額外多分配一些,這樣的機制(over—allocating)保證了其操作的高效性:增加/刪除的時間復雜度均為O(1)。
但是對于元組,情況就不同了。元組長度大小固定,元素不可變,所以存儲空間固定。
列表和元組的性能
通過學習列表和元組存儲方式的差異,我們可以得出結論:元組要比列表更加輕量級一些,所以總體上來說,元組的性能速度要略優于列表。
另外,Python會在后臺,對靜態數據做一些資源緩存(resource caching)。通常來說,因為垃圾回收機制的存在,如果一些變量不被使用,Python就會回收它們所占用的內存,返還給操作系統,以便其他變量或其他應用使用。
但是對于一些靜態變量,比如元組,如果它不被使用并且占用空間不大時,Python會暫時緩存這部分內存。這樣,下次我們在創建同樣大小的元組時,Python就可以不用再向操作系統發出請求,去尋找內存,而是可以直接分配之前緩存的內存空間,這樣就能大大加快程序的運行速度。
?
?
?
轉載于:https://www.cnblogs.com/mylearning-log/p/10872935.html
總結
以上是生活随笔為你收集整理的python — 列表与元组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《你说对就队》第四次作业:项目需求调研与
- 下一篇: mvc在页面上显示PDF