天天看點

《Python資料科學指南》——1.6 寫一個清單

本節書摘來自異步社群《python資料科學指南》一書中的第1章,第1.6節,作者[印度] gopi subramanian ,方延風 劉丹 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

清單是一種順序型的容器對象,它和元組很相似,不過,它們是同構且是可變的。清單支援追加操作,它可以被用來當作棧或者隊列。與元組不同,它可以擴充,你可以在建立一個清單之後使用append函數給它追加一個元素。

和介紹元組的小節相似,我們通過一些小段的代碼來聚焦于清單的建立與維護操作,而不是像介紹字典那樣采用完整的功能代碼。

下面的python代碼示範清單的建立和維護等操作。

第1步中,我們能看到建立清單的方式與其他的不同,請注意我們隻有同類型的元素。和集合不一樣,清單允許存在重複的元素。第2步到第7步和元組的相關步驟都是一樣的,覆寫了索引、切片、串聯、最小最大值、包含于和非包含于等操作,我們不再贅述。

第8步示範了追加和擴充操作,這也是清單差別于元組的地方(當然,請注意清單元素必須是同類型)。我們來看看代碼第1部分的輸出。

我們看到10被添加到清單a中。

下面的輸出是第2部分中擴充函數的示範。

我們用另一個清單b擴充了原來的清單。

在第9步中,我們示範了用清單實作棧的功能,pop()函數用來取回追加到清單中的最後一個元素,輸出結果如下。

最後一個被追加進來的元素被第一個取回,這就是棧的後進先出(last in first out,lifo)。

在第10步,我們用清單來實作隊列,pop()函數用0作為參數,表明要取出的元素的索引已經被傳遞了,輸出結果如下。

輸出結果遵循的是隊列的fifo類型,但這是一種低效的方法。由于清單底層實作的方法限制,彈出最初的元素不是一個好的選擇。如果想要執行這個操作,一個更有效的方法是使用雙端隊列資料結構,我們将在下一章節中介紹。

最後一個步驟展示了清單的sort和reverse操作。清單的内置函數sort()可以将清單的元素進行排序,預設是升序排序。本章後面有個專門的小節講解排序。reverse()函數将清單中的元素進行反轉。

我們先來建立一個清單,元素是從1到19。

<code>a = range(1,20)</code>

random子產品中有一個shuffle()函數,我們先用它将清單中的元素攪亂,然後我們才能示範排序操作,攪亂後的輸出結果如下。

<code>[19, 14, 11, 12, 4, 13, 17, 5, 2, 3, 1, 16, 8, 15, 18, 6, 7, 9, 10]</code>

現在,a.sort()執行了一個位置排序,我們得到如下的輸出結果。

<code>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]</code>

reverse()也是一個位置操作,産生如下輸出結果。

<code>[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]</code>

棧或隊列隻能在一個方向上追加或彈出資料,而雙端隊列有兩個端,可以在不同的端執行追加或彈出資料操作,請參見: