數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu),就是一些數(shù)據(jù)的集合扔亥。換個說法场躯,數(shù)據(jù)結(jié)構(gòu)存儲一系列相關(guān)的數(shù)據(jù)。
內(nèi)置有四種數(shù)據(jù)結(jié)構(gòu)列表旅挤、元組踢关、詞典和集合。下面看看怎么使用他們粘茄。
列表
列表這種數(shù)據(jù)結(jié)構(gòu)存儲一個有序集合签舞。它就類似于購物清單,不同之處是購物清單里的元素一行一行柒瓣,但是列表里的元素用逗號分隔瘪菌。
列表的元素被方括號括起來,這樣Python能夠知道它是一個列表嘹朗。當(dāng)創(chuàng)建了一個列表時师妙,你可以添加、移除元素屹培,所以列表是可以被修改的數(shù)據(jù)結(jié)構(gòu)默穴。
對象和類的簡單介紹
為了更好的理解列表,這里對對象和類做個簡短的介紹褪秀,后面的章節(jié)有詳細(xì)的介紹蓄诽。
列表是對象和類的一種用法。當(dāng)我們定義變量i媒吗,并給它賦值5,就創(chuàng)建了一個整數(shù)類型的對象仑氛。你可以閱讀int的幫助文檔來更好地理解(help(int)
)。
類有方法,也就是僅當(dāng)前類能使用的函數(shù)锯岖。當(dāng)你有這個類創(chuàng)建的對象時介袜,才能使用這些函數(shù)。舉個例子出吹,Python給列表類提供了尾加元素的方法遇伞,比如,mylist.append('an item')將會在mylist列表尾添加一個字符串'an item'捶牢。注意鸠珠,要通過點號來獲取對象的方法。
類也有域秋麸,也就是僅當(dāng)前類能使用的變量渐排。當(dāng)你有這個類創(chuàng)建的對象時,才能使用這些變量灸蟆。域也是通過點號來獲取的飞盆,比如,mylist.field次乓。
例子(保存至ds_using_list.py
):
shoplist = ['apple', 'mango', 'carrot', 'banana']
print('I have', len(shoplist), 'items to purchase.')
print('These items are:', end=' ')
for item in shoplist:
print(item, end=' ')
print('')
print('I also have to bue rice.')
shoplist.append('rice')
print('My shoplist is now', shoplist)
print('I will sort my list now.')
shoplist.sort()
print('Sorted shoplist is', shoplist)
print('The first item I will buy is', shoplist[0])
print('I bought the', shoplist.pop(0))
print('My shoplist is now', shoplist)
輸出:
$ python ds_using_list.py
I have 4 items to purchase.
These items are apple mango carrot banana
I also have to bue rice.
My shoplist is now [apple, mango, carrot, banana, rice]
I will sort my list now.
Sorted shoplist is [apple, banana, carrot, mango, rice]
The first item I will buy is apple
I bought the apple
My shoplist is now [banana, carrot, mango, rice]
它是怎么運作的呢吓歇?
購物清單列表里的變量就是某人要去超市要買的東西。購物清單列表里只是存儲了要買東西的名字票腰,你也可以往列表里添加任意的對象城看,可以是數(shù)字、甚至列表杏慰。
這里我們用到了for..in循環(huán)去迭代列表里的元素测柠。你需要了解列表是一個序列。序列的詳細(xì)知識在后面章節(jié)缘滥。
注意轰胁,print的end參數(shù),表示打印輸出的結(jié)尾用什么符號朝扼。
接下來赃阀,我們往列表里添加了一個元素。然后查看列表是否有了這個元素擎颖。把列表作為參數(shù)值直接傳入print函數(shù)榛斯,也會有漂亮的打印結(jié)果。
然后搂捧,我們給列表排序驮俗,用的是列表的方法sort。重要的是允跑,它會改變列表里元素排列的順序王凑,同字符串排序不同的是搪柑,它是在修改原來的列表,并不是返回一個新的列表索烹。為什么常說的列表是可以更改的工碾,這就是原因。
下面术荤,我們買了一個購物清單上的東西,所以需要把它從清單上去掉每篷。用del語句刪除列表中的元素瓣戚。
如果你想知道list對象定義的所有方法,用help(list)查看詳情焦读。
元組
元組用來存儲多個對象子库。它同列表相似,但是沒有追加的功能矗晃。元組的一個主要特性是仑嗅,不能被修改,就像字符串一樣张症。
元組的元素用逗號分隔仓技,元組要用小括號括起來。
元組經(jīng)常用在集合的元素不能被重新賦值的地方俗他。
例子(保存在ds_using_tuple.py
):
zoo = ('python', 'elephant', 'penguin')
print('Number of animals in the zoo is', len(zoo))
new_zoo = 'monkey', 'camel', zoo
print('Number of cages in the new zoo is', len(new_zoo))
print('All animals in new zoo are', new_zoo)
print()...
輸出:
它是怎么運作的脖捻?
zoo是一個包含多個元素的元組。我們可以使用len函數(shù)來獲取元組的長度兆衅,也就是元組元素的個數(shù)地沮。這也說明了元組是一個序列。
舊的動物園要關(guān)閉了羡亩,所以現(xiàn)在要把這些動物搬到新的動物園摩疑。于是,表示新動物園的元組應(yīng)該包含現(xiàn)有的動物和舊動物園搬來的動物畏铆。元組里嵌套元組雷袋,是可以的。
可以用下標(biāo)來獲取元組的元素辞居,下標(biāo)也就是元素在元組的位置片排,用方括號來表示。所以要獲取新動物園的第三個元素速侈,可以輸入new_zoo[2]率寡,如果要獲取嵌套元組的元素,可以輸入像new_zoo[2][2]的代碼倚搬。
元組是空和有一個元素的情況:
一個空元組用一對小括號表示冶共,括號里沒有元素。但是有一個元素的元組表示起來就沒有那么簡單了。你必須在第一個元素后面加一個逗號捅僵,這樣Python才能識別出它是一個元組家卖,而不是一個括號括起來的對象。也就是說庙楚,一個元素的元組應(yīng)該類似于 sigleton = (2,)上荡。
給Perl程序猿的提示:
列表里可以嵌套列表堤撵。拂募。。巴拉巴拉
字典
字典類似于地址薄尸红,比如說你可以通過姓名查找到他/她的地址等等信息纳账,也就是關(guān)鍵字(姓名)和值(地址等信息)是有對應(yīng)關(guān)系的逛薇。注意,關(guān)鍵字必須是唯一的疏虫。如果兩個人的名字一樣永罚,你能確定他/她的地址信息嗎?
注意卧秘,字典里的關(guān)鍵字必須是不可修改的類型呢袱,比如字符串。字典的值可以是任意類型翅敌。一般情況产捞,關(guān)鍵字用些簡單的對象來表示。
鍵值對哼御,也就是一對關(guān)鍵字和值坯临,用關(guān)鍵字加冒號加值來表示,像d = {key1: value1, key2: value2}恋昼。注意看靠,關(guān)鍵字和值用冒號分隔,鍵值對用逗號分隔液肌,字典用大括號括起挟炬。
記住,字典里的鍵值對是無序的嗦哆,因此如果想要有序的用它谤祖,你就要在用它之前就進(jìn)行排序。
你在使用的字典屬于dict類的對象老速。
例子(保存至ds_using_dict.py
):
ab = {...}
輸出:
它是怎么運作的呢粥喜?
先是創(chuàng)建了一個字典ab
。然后通過下標(biāo)操作符來取關(guān)鍵字對應(yīng)的值橘券。
使用del來刪除鍵值對额湘。只需要在下標(biāo)操作符里填入要刪除的鍵值對的關(guān)鍵字就可以了卿吐。
下面