數(shù)據(jù)結構(Data Structure)
數(shù)據(jù)結構
如在現(xiàn)實世界中一樣,直到我們擁有足夠多的東西,才迫切需要一個儲存東西 的容器,這也是我堅持把數(shù)據(jù)結構放在最后面的原因一一直到你掌握足夠多的技能, 可以創(chuàng)造更多的數(shù)據(jù),你才會重視數(shù)據(jù)結構的作用。這些儲存大量數(shù)據(jù)的容器,在 Python 稱之為內置數(shù)據(jù)結構(Built-in Data Structure)。
Python有四種數(shù)據(jù)結構,分別是:列表、字典、元組,集合。每種數(shù)據(jù)結構都 有自己的特點,并且都有著獨到的用處。為了避免過早地陷入細枝末節(jié),我們先從整 體上來認識一下這四種數(shù)據(jù)結構:
從最容易識別的特征上來說,列表中的元素使用方括號擴起來,字典和集合是花 括號,而元組則是圓括號。其中字典中的元素是均帶有':’的key與value的對應關 系組。
列表(List)
首先我們從列表開始,深入地講解每一種數(shù)據(jù)結構。列表具有的最顯著的特征
1. 列表中的每一個元素都是可變的;
2. 列表中的元素是有序的,也就是說每一個元素都有一個位置;
3. 列表可以容納Python中的任何對象。
列表中的元素是可變的,這意味著我們可以在列表中添加、刪除和修改元素。 列表中的每一^元素都對應著一^位置,我們通過輸入位置而查詢該位置所對應的值。
列表的曾刪改查:
對于數(shù)據(jù)的操作,最常見的是增刪改查這四類。從列表的插入方法開始,輸入:
fruit=['pineapple','pear'] fruit.insert(1,'grape') print(fruit)
在使用insert方法的時候,必須指定在列表中要插入新的元素的位置,插入元素 的實際位置是在指定位置元素之前的位置,如果指定插入的位置在列表中不存在,實 際上也就是超出指定列表長度,那么這個元素一定會被放在列表的最后位置。
字典(Dictionary)
編程世界中其實有很多概念都基于現(xiàn)實生活的原型,字典這種數(shù)據(jù)結構的特征也 正如現(xiàn)實世界中的字典一樣,使用名稱-內容進行數(shù)據(jù)的構建,在Python中分別對 應著鍵(key)-值(value),習慣上稱之為鍵值對。
字典的特征總結如下:
1.字典中數(shù)據(jù)必須是以鍵值對的形式出現(xiàn)的;
2.邏輯上講,鍵是不能重復的,而值可以重復;
3.字典中的鍵(key)是不可變的,也就是無法修改的;而值(value)是可變的,可修改的,可以是任何對象。
字典的曾刪改查:
首先我們按照映射關系創(chuàng)建一個字典,繼續(xù)使用前面的例子:
NASDAQ_code = {'BIDU':'Baidu','SINA':'Sina'}
與列表不同的是,字典并沒有一個可以往里面添加單一元素的“方法”,但是我們 可以通過這種方式進行添加:
NASDAQ_code['YOKU']='Youku'print(NASDAQ_code)
列表中有用來添加多個元素的方法extendO,在字典中也有對應的添加多個元 素的方法updateO:
NASDAQ_code.update({'FB' 'Facebook','TSLA' 'Tesla'})
刪除字典中的元素則使用del方法:
del NASDAQ_code['FB']
需要注意的是,雖說字典是使用的花括號,在索引內容的時候仍舊使用的是和 列表一樣的方括號進行索引,只不過在括號中放入的一定是一一字典中的鍵,也就 是說需要通過鍵來索引值:
NASDAQ_code['TSLA']
同時,字典是不能夠切片的,也就是說下面這樣的寫法應用在字典上是錯誤的:
chart[1:4] # WRONG!
元組(Tuple)
元組其實可以理解成一個穩(wěn)固版的列表,因為元組是不可修改的,因此在列表 中的存在的方法均不可以使用在元組上,但是元組是可以被查看索引的,方式就和 歹U表一樣:
letters = (lal,lbl,lcl,ldl,lel,'fl,lgl) letter[0]
集合(Set)
集合則更接近數(shù)學上集合的概念。每一個集合中的元素是無序的、不重復的任 意對象,我們可以通過集合去判斷數(shù)據(jù)的從屬關系,有時還可以通過集合把數(shù)據(jù)結 構中重復的元素減掉。
集合不能被切片也不能被索引,除了做集合運算之外,集合元素可以被添加還有 刪除:
a_set ={1,2,3,4}a_set.add(5)a_set.discard(5)
數(shù)據(jù)結構的一些技巧
多重循環(huán)
有很多函數(shù)的用法和數(shù)據(jù)結構的使用是息息相關的。前面我們學習了列表的基 本用法,而在實際操作中往往會遇到更多的問題。比如,在整理表格或者文件的時 候會按照字母或者日期進行排序,在Python中也存在類似的功能:
num_list = [6,2,7,4,1,3,5]
print(sorted(num_list))
推導式
現(xiàn)在我們來看數(shù)據(jù)結構中的推導式(List comprehension),也許你還看到過它 的另一種名稱叫做列表的解析式,在這里你只需要知道這兩個說的其實是一個東西就 可以了。
列表推導式的用法也很好理解,可以簡單地看成兩部分。紅色虛線后面的是我們 熟悉的for循環(huán)的表達式,而虛線前面的可以認為是我們想要放在列表中的元素,在 這個例子中放在列表中的元素即是后面循環(huán)的元素本身。
循環(huán)列表時獲取元素的索引
前面提到過,列表是有序的,這時候我們可以使用Python中獨有的函數(shù)enumerate 來進行:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] for num,letter in enumerate(letters): print(letter,'is',num + 1)
END
寧夏一沐智云網(wǎng)絡科技有限公司
掃 描 二 維 碼 關 注 我 們