Python 列表的应用场景有哪些?你使用对了吗?
今天來聊一聊列表在實際開發(fā)中的應(yīng)用場景。
在開發(fā)中,選用何種數(shù)據(jù)結(jié)構(gòu)是由我們面對的數(shù)據(jù)特征和業(yè)務(wù)場景決定的。
-
數(shù)據(jù)是單個的還是批量的,是小規(guī)模的還是海量的?
-
數(shù)據(jù)是獨立的還是彼此關(guān)聯(lián)的?
-
數(shù)據(jù)的生成是隨機的還是有先后順序的?
-
數(shù)據(jù)的用途是什么?會不會頻繁讀寫?只讀多還是修改多?
-
數(shù)據(jù)是否應(yīng)用于多線程環(huán)境?
…(此處省略 N 多情形。)
一旦確定了數(shù)據(jù)特征和業(yè)務(wù)場景,我們就可以從開發(fā)工具箱中選擇合適的工具了。
對于 list 而言,首先它是一個對象集合,你可以在處理批量數(shù)據(jù)時使用 list。
>>> alist =[i for i inrange(21)] >>> alist [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] >>> alist.append(2021) >>> alist [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2021]我們知道,tuple 也可以用來存儲多個對象,但是 tuple 是不可變的,一旦初始化,無法再增減其中的元素的個數(shù)。tuple 從語法上保證了元素數(shù)目不會被修改。
如果你恰好不希望別人向數(shù)據(jù)集中增刪元素,你應(yīng)該優(yōu)先使用 tuple,而非list。反過來,如果你需要動態(tài)調(diào)整數(shù)據(jù)集合中的元素的個數(shù),那就應(yīng)該選擇 list。
這是否意味著所有動態(tài)數(shù)據(jù)集都可以使用 list 呢?非也。
如果你的數(shù)據(jù)很少被修改,絕大部分時間都是被讀取的,這很適合使用 list 來存儲。因為 list 為我們提供了索引和切片操作,可以快速訪問其中的元素。
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> alist [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2021] >>> alist[10] 10 >>> alist[3:9] [3,4,5,6,7,8] >>> alist[3:9:2] [3,5,7]如果你僅僅使用 append() 在 list 尾部追加元素,或者刪除 list 尾部元素,那也可以放心使用 list。因為,在列表末尾添加和刪除元素非常快。
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> stack =[3,4,5] >>> stack.append(6) >>> stack.append(7) >>> stack [3,4,5,6,7] >>> stack.pop() 7 >>> stack [3,4,5,6] >>> stack.pop() 6 >>> stack [3,4,5]這種情形下,list 其實就用作棧(stack)了。
但是,如果你的程序需要頻繁在 list 頭部或中間插入或刪除元素,list 就不太適合你的需求了。
因為,list 底層是通過變長數(shù)組實現(xiàn)的。在數(shù)組頭部或中間插入或刪除元素,需要逐個移動插入位置之后的每個元素。這在數(shù)據(jù)量大時會消耗大量時間,效率低下。
而在常見的業(yè)務(wù)場景中,頻繁增刪中間元素的操作多見于鏈?zhǔn)酱鎯Y(jié)構(gòu)(如鏈表),在線性存儲結(jié)構(gòu)(如數(shù)組)中并不多見。
如果想在 Python 中使用鏈?zhǔn)浇Y(jié)構(gòu),可以使用 collections.deque。嚴(yán)格來說,collections.deque 也不是一個完全的鏈?zhǔn)浇Y(jié)構(gòu),它是一個帶有塊(block)數(shù)據(jù)的鏈?zhǔn)浇Y(jié)構(gòu)。每個 block 都是一個線性數(shù)組。
我們來看一個需要頻繁在數(shù)據(jù)集的首尾執(zhí)行操作的場景:隊列(queue)。
隊列是一個先進先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)從尾部插入,從頭部取出。就好像我們?nèi)粘E抨犚粯印?/p>
由于需要頻繁刪除頭部元素,list 也不適合用作隊列。很多初學(xué)者僅從list 這個單詞的字面意思來理解,就把 list 作為隊列來使用,這是欠妥的。
我們可以用 collections.deque 來實現(xiàn)隊列操作。
>>>from collections import deque >>> queue = deque(["Eric","John","Michael"]) >>> queue.append("Terry") >>> queue.append("Graham") >>> queue deque(['Eric','John','Michael','Terry','Graham']) >>> >>> queue.popleft() 'Eric' >>> queue.popleft() 'John' >>> queue deque(['Michael','Terry','Graham'])總結(jié)
-
list 適用于處理動態(tài)數(shù)據(jù)集,特別適合用于讀操作遠多于寫操作的場景。
-
list 可用來實現(xiàn)棧操作。
-
List 不適合用作隊列,可使用 collections.deque 來實現(xiàn)隊列操作。
總結(jié)
以上是生活随笔為你收集整理的Python 列表的应用场景有哪些?你使用对了吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3 字符串与hex之间的相互
- 下一篇: 弃繁就简!一行代码搞定 Python 日