【python從入門到放棄】1.list&tuple
技術標籤:python從入門到放棄python列表
文章目錄
列表
陣列:list[]
陣列追加:list.append()
陣列插入索引為n的元素:list.insert(n,’’)
陣列中刪除最後一個元素:list.pop()
刪除指定位置元素:list.pop(i)(i為索引位置)
替換某個元素:list[i]=’’
List中元素的資料型別可以不同
L = [‘Apple’,123,True]
List元素可以是另一個List
S = [‘python’,‘c++’,[‘asp’,‘java’],‘html’]
Len(S) = 4
元組
另一種有序叫元組:tuple,但tuple一旦初始化就不能修改,其餘基本同list
tuple採用圓括號;list採用方括號
只有一個元素的tuple定義是必須加一個逗號(,)來消除歧義 t = (1,)
例:“可變的”tuple
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
tuple的“不變”指的是,tuple的每個元素的指向永遠不變,指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的。
列表(list)是動態的,長度大小不固定,可以隨意地新增、刪減或者改變元素(Mutable)
元組(tuple)是靜態的,長度大小固定,無法刪減或者改變(immutable)
兩者可以通過 list() 和 tuple() 函式相互轉換
list((1, 2, 3)) ——>[1,2,3]
tuple([1,2,3]) ——>(1,2,3)
內建函式
列表和元組常見的內建函式
l = [3, 2, 3, 7, 8, 1]
l.count(3) ——>2 ——統計列表或元組中元素出現的次數
l.index(7) ——>3 ——返回列表或元組中元素第一次出現的索引
l.reverse() ——>[1, 8, 7, 3, 2, 3] ——原地倒轉列表(元組沒有)
reversed() 和 sorted() 同樣表示對列表或元組進行倒轉和排序
reversed() 返回一個倒轉後的迭代器;sorted() 返回拍好序的新列表
儲存方式
列表和元組儲存方式的差異
列表是動態的、可變的;元組是靜態的、不可變的
l = [1, 2, 3]
l.__sizeof__() ——>64
(由於列表是動態的,因此它需要儲存指標,來指向對應的元素,對於int型,8位元組;另外,由於列表可變,所以需要額外儲存已經分配的長度大小:8位元組,這樣才可以實時追蹤列表空間的使用情況,當空間不足時,及時分配額外空間)
tup = (1, 2, 3)
tup.__sizeof__() ——>48
空列表的儲存空間為 40位元組,空元組的儲存空間為 24位元組
效能
列表和元組的效能
元組比列表更加輕量級一些,總體上來說,元組的效能速度優於列表。
如果一個列表在元組中的話,其實這個元組是可變的,只是這個可變只是能改變該列表中的內容
計算初始化一個相同元素的列表和元組分別所需時間:
python -m timeit 'x= (1,2,3,4.5,6)'
python -m timeit 'x = [1,2,3,4,5,6]'
元組的初始化速度比列表快很多
但如果是索引操作的話,兩者的速度差別非常小
python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]'
python3 -m timeit -s 'x=(1,2,3,4,5,6)' 'y=x[3]'
如果想要增加/刪減/改變元素,列表顯然更優,因為對於元組,必須通過新建一個元組來完成。
使用場景
列表和元組的使用場景
1、如果儲存的資料和數量不變,比如你有一個函式,需要返回的是一個地點的經緯度,然後直接傳給前端渲染,那麼選用元組更合適
def get_location():
return(longitude, latitude)
2、如果儲存的資料或數量是可變的,比如社交平臺上的一個日誌功能,是統計一個使用者在一週之內看了哪些使用者的帖子,那麼使用列表更合適