python:第4關(guān)(列表和字典)

python:第4關(guān)(列表和字典)

嗨齐苛,很高興能在第四關(guān)遇見你熊赖,繼續(xù)和你一起馳騁在廣闊的編程世界里澎嚣。

當(dāng)你選擇來到第四關(guān),有兩件事是不言而喻的淋淀。第一:你是對自己有盼望有要求的遥昧,你希望能夠真正地掌握Python。

第二:你對我和我們團(tuán)隊是有信心的朵纷,你認(rèn)可了“我能教會你Python”這件事炭臭。

基于此,我們之間就達(dá)成了某種“契約”關(guān)系袍辞,你付出一定的時間精力成本鞋仍,我則負(fù)責(zé)讓你能高效快速入門、上手直至精通Python搅吁。

這是我對你許下的承諾威创,更是我對自己的承諾。無論這是你第1次還是第10次立下的flag:我一定要學(xué)會Python谎懦,我希望對你而言都會是最后一次肚豺。

正所謂少壯不努力,老大轉(zhuǎn)錦鯉界拦。讓我們一起把旗子給拔了吧详炬。:)

話不多說,我們開始正式學(xué)習(xí)。首先呛谜,來看看我們在第0-3關(guān)所學(xué)的內(nèi)容。

相信你應(yīng)該還記憶猶新枪萄,學(xué)得不賴吧隐岛?否則應(yīng)該是沒勇氣繼續(xù)挑戰(zhàn)了哈哈~

從第4關(guān)開始,我們會利用代碼來實現(xiàn)更多的功能瓷翻,我們先來掃一眼接下來的課程表:

剩下的16關(guān)聚凹,除了常規(guī)的8個知識關(guān)卡,我還設(shè)置了3個思維關(guān)卡齐帚,5個項目實操關(guān)卡妒牙。

知識關(guān)卡的目的是學(xué)習(xí)Python的基礎(chǔ)知識,思維關(guān)卡的目的是為你補(bǔ)充一些必要的編程思維知識对妄,實操關(guān)卡的目的是手把手帶你做出一些編程項目湘今。(我會在具體關(guān)卡中再介紹)

隨著學(xué)習(xí)深度的增加,我們的學(xué)習(xí)難度和理解成本勢必也會增加剪菱。不過不要擔(dān)心摩瞎,我希望這三種類型的關(guān)卡能互相結(jié)合,可以讓你在學(xué)完整個課程后孝常,擁有扎實的基本功底旗们,

好了,相信你對整個課程的安排已經(jīng)有了個大概的認(rèn)知构灸,現(xiàn)在我們回到這一關(guān)的學(xué)習(xí)任務(wù)上渴。

截至目前,我們已經(jīng)掌握了3種數(shù)據(jù)類型:整數(shù)喜颁、浮點數(shù)稠氮、字符串。這一關(guān)我們就要學(xué)習(xí)兩種新的數(shù)據(jù)類型:列表洛巢、字典括袒。

不過在這之前,我想先和你聊一聊“計算機(jī)”與“數(shù)據(jù)”之間水乳交融的關(guān)系稿茉。

計算機(jī)名字里就有【計算】兩字锹锰,如果計算機(jī)離開了數(shù)據(jù),就如巧婦難為無米之炊漓库。所以說恃慧,數(shù)據(jù)對于計算機(jī)很重要。

總的來說渺蒿,計算機(jī)有3種方式利用數(shù)據(jù):


第一種:直接使用數(shù)據(jù)痢士,比如print()語句,可以直接把我們提供的數(shù)據(jù)打印出來茂装,通常所見即所得怠蹂。

第二種:計算和加工數(shù)據(jù)善延,讓我們看個例子:

這兩個print語句,計算機(jī)都是先【計算和加工數(shù)據(jù)】城侧,再把print()括號里的數(shù)據(jù)打印到屏幕里易遣。

我們再看看第三種:用數(shù)據(jù)做判斷是怎么一回事。

可以看出嫌佑,計算機(jī)在這里是【利用數(shù)據(jù)用做邏輯判斷】:

那現(xiàn)在我們對【計算機(jī)】和【數(shù)據(jù)】的關(guān)系有了一定的了解吧豆茫,也正因為數(shù)據(jù)的重要性,所以對于編程新手來說屋摇,掌握主要的數(shù)據(jù)類型是重中之重揩魂。

這一關(guān),我們就會接觸兩種新的數(shù)據(jù)類型——列表和字典炮温,你會發(fā)現(xiàn)火脉,它們比我們學(xué)過的“整數(shù)、浮點數(shù)茅特、字符串”更加高級忘分,更有“包容性”。

為什么這么說呢白修?前面學(xué)的幾種類型妒峦,每次賦值只能保存一條數(shù)據(jù)。如果我們需要使用很多數(shù)據(jù)的時候兵睛,就會很不方便肯骇。

而列表和字典的作用,就是可以幫我們存儲大量數(shù)據(jù)祖很,讓計算機(jī)去讀取和操作笛丙。

一、列表

首先我們來看看列表假颇。為了感受列表的作用胚鸯,我們來玩玩角色扮演的游戲:從現(xiàn)在起,你就是一個新班級的班主任了笨鸡!

第一天姜钳,班上來了50個新鮮的面孔。你讓學(xué)生把名字寫在花名冊上形耗,方便上課時一個個點名哥桥。

如果只能用已學(xué)的知識來解決這個問題,我們需要將每個學(xué)生的名字都賦值到一個變量名激涤,然后再分別打印拟糕。代碼是這樣的:

但我們知道,在編程世界里,最忌諱的就是“重復(fù)性勞動”送滞。這一百行代碼打下來侠草,即使是復(fù)制黏貼修改的,分分鐘也要抓狂犁嗅。

實際上呢梦抢,只要學(xué)會了列表和循環(huán)(劇透:循環(huán)下一關(guān)會講,可先忽略)愧哟,3行代碼就能搞定。

但我們知道哼蛆,在編程世界里蕊梧,最忌諱的就是“重復(fù)性勞動”。這一百行代碼打下來腮介,即使是復(fù)制黏貼修改的肥矢,分分鐘也要抓狂。

實際上呢叠洗,只要學(xué)會了列表和循環(huán)(劇透:循環(huán)下一關(guān)會講甘改,可先忽略),3行代碼就能搞定灭抑。

發(fā)現(xiàn)了嗎十艾?在第一行代碼里,賦值號右邊不再像字符串那樣只能放一個名字腾节,而是放了50個忘嫉。

這就是我們要新認(rèn)識的第一個數(shù)據(jù)類型——列表,下面我會從4個方面來介紹列表的用法案腺。

1庆冕、什么是列表

首先,我們來看看列表(list)的代碼格式:

圖中的['小明','小紅','小剛']就是一個列表劈榨。

一個列表需要用中括號[ ]把里面的各種數(shù)據(jù)框起來访递,里面的每一個數(shù)據(jù)叫作“元素”。每個元素之間都要用英文逗號隔開同辣。

這就是列表的標(biāo)準(zhǔn)格式拷姿,現(xiàn)在請你創(chuàng)建一個列表名為list1的列表,列表里有三個元素:'小明'邑闺、18跌前、1.70,并將其打印出來:

老師的答案是這樣子的:

恭喜你陡舅,成功掌握了列表的規(guī)范寫法以及打印列表的方法抵乓。而且,你也用代碼驗證了一個知識點:列表很包容,各種類型的數(shù)據(jù)(整數(shù)/浮點數(shù)/字符串)無所不能包灾炭。

不過茎芋,很多時候,我們只需要用到列表中的某一個元素蜈出,好比老師上課點名時田弥,不會說“所有的同學(xué)都站起來回答一下這個問題”。

所以铡原,問題來了:列表中具體的某個元素偷厦,要如何取出來?

2燕刻、從列表提取單個元素

這就涉及到一個新的知識點:偏移量只泼。列表中的各個元素,好比教室里的某排學(xué)生那樣卵洗,是有序地排列的请唱,也就是說,每個元素都有自己的位置編號(即偏移量)过蹂。

從上圖可得:1.偏移量是從0開始的十绑,而非我們習(xí)慣的從1開始;2.列表名后加帶偏移量的中括號酷勺,就能取到相應(yīng)位置的元素本橙。

所以,我們可以通過偏移量來對列表進(jìn)行索引(可理解為搜索定位)鸥印,讀取我們所需的元素勋功。

假如你現(xiàn)在要喊小明來回答問題,用代碼怎么寫呢库说?請補(bǔ)充下列代碼狂鞋,利用列表的偏移量來打印出'小明'這個元素。

老師的答案是這樣子的:

現(xiàn)在我們已經(jīng)知道了如何從列表中取出一個元素潜的,那如果要同時取好幾個呢骚揍?所以我們接著學(xué)習(xí)如何從列表中取出多個元素。

3啰挪、從列表提取多個元素

這次信不,老師不會直接告訴你需要用到的知識,而是想讓你自己總結(jié)出規(guī)律亡呵。

請運行以下代碼抽活,對比代碼和終端最后的結(jié)果,嘗試發(fā)現(xiàn)當(dāng)中的規(guī)律锰什。老師過會兒會考考你下硕。

一個提醒:下列:左右兩邊的數(shù)字指的是列表中元素的偏移量丁逝,記住偏移量(索引)始終是從0開始的。

上面這種用冒號來截取列表元素的操作叫作切片梭姓,顧名思義霜幼,就是將列表的某個片段拿出來處理。這種切片的方式可以讓我們從列表中取出多個元素誉尖。

現(xiàn)在就請你來試驗一下吧罪既,請修改代碼,用切片將列表中小明和小紅兩個元素一起取出來铡恕。

老師的答案是這樣子的:

另外琢感,我們要注意一個細(xì)節(jié):偏移量取到的是列表中的元素,而切片則是截取了列表的某部分探熔,所以還是列表猩谊,請你運行下列代碼看一看。

學(xué)完了如何取出列表中的元素祭刚,我們接著往下看。

4墙牌、給列表增加/刪除元素

過了一周涡驮,你正上著課呢,教導(dǎo)主任突然領(lǐng)了一個新學(xué)生“小美”喜滨,說是轉(zhuǎn)校生捉捅,要插到你們班。這時虽风,我們就需要用到append()函數(shù)給列表增加元素棒口,append的意思是附加,增補(bǔ)辜膝。

我們還是通過代碼來試驗一番无牵,請你運行代碼,并思考規(guī)律:(注:報錯后厂抖,可讀一下報錯信息茎毁,然后在第6行開頭加個#號,將其注釋掉再運行)

你發(fā)現(xiàn)規(guī)律了嗎忱辅?我們來解讀一下報錯信息和代碼的結(jié)果:

這句話的意思是:append后的括號里只能接受一個參數(shù)七蜘,但卻給了兩個,也就是4和5墙懂。所以橡卤,用append()給列表增加元素,每次只能增加一個元素损搬。

現(xiàn)在碧库,請你把小美加入students列表中柜与,并打印出列表,注意格式是列表名.append( ):

老師的答案是這樣子的:

很棒喲~現(xiàn)在你已經(jīng)知道如何增添列表中的元素了谈为。

又是新的一天旅挤,你接到一個電話,小紅生病請假了伞鲫,今天不來上課粘茄。所以,你要將小紅從列表中刪除秕脓。

提示:需要用到del語句柒瓣。請你先讀一下Python官方文檔對“del語句”的解釋:(懂得閱讀官方文檔也是編程學(xué)習(xí)中一個重要能力)

請你根據(jù)上圖中的知識,補(bǔ)全下面的代碼吠架,將'小紅'從列表中刪除芙贫,并打印出來:(語法是:del 列表名[元素的索引])

事實上del語句非常方便,既能刪除一個元素傍药,也能一次刪除多個元素(原理和切片類似磺平,左取右不劝烙选)瘩扼。

至此,我們對列表的基本概況已經(jīng)摸了個遍宵晚,是時候總結(jié)一下了:

掌握了這些俱诸,列表這種數(shù)據(jù)類型菠劝,你就算入門了。后續(xù)就是在練習(xí)和項目中不斷積累經(jīng)驗睁搭,活用列表赶诊。接下來我們就來學(xué)習(xí)另外一種數(shù)據(jù)類型。

二园骆、數(shù)據(jù)類型:字典

眾所周知舔痪,一個老師的日常就是出卷、改卷锌唾。這次期中考呢辙喂,小明、小紅鸠珠、小剛分別考了95巍耗、90和90分。

假如我們還用列表來裝數(shù)據(jù)的話渐排,我們需要新創(chuàng)建一個列表來專門放分?jǐn)?shù)炬太,而且要保證和姓名的順序是一致的,很麻煩驯耻。

所以類似這種名字和數(shù)值(如分?jǐn)?shù)亲族、身高炒考、體重等)兩種數(shù)據(jù)存在一一對應(yīng)的情況,用第二種數(shù)據(jù)類型——“字典”(dictionary)來存儲會更方便霎迫。

1斋枢、什么是字典

同樣的,我們先來看一下字典是長怎么樣的:

仔細(xì)看下知给,字典和列表有3個地方是一樣的:1.有名稱瓤帚;2.要用=賦值;3.用逗號作為元素間的分隔符涩赢。

而不一樣的有兩處:1.列表外層用的是中括號[ ]戈次,字典的外層是大括號{ };

2.列表中的元素是自成一體的筒扒,而字典的元素是由一個個鍵值對構(gòu)成的怯邪,用英文冒號連接。如'小明':95花墩,其中我們把'小明'叫鍵(key)悬秉,95叫值(value)。

這樣唯一的鍵和對應(yīng)的值形成的組合冰蘑,我們就叫做【鍵值對】搂捧,上述字典就有3個【鍵值對】:'小明':95、'小紅':90懂缕、'小剛':90

如果不想口算,我們可以用len()函數(shù)來得出一個列表或者字典的長度(元素個數(shù))王凑,括號里放列表或字典名稱

這里需要強(qiáng)調(diào)的是搪柑,字典中的鍵具備唯一性,而值可重復(fù)索烹。也就是說字典里不能同時包含兩個'小明'的鍵工碾,但卻可以有兩個同為90的值。

現(xiàn)在百姓,我們嘗試將小明的成績從字典里打印出來渊额。這就涉及到字典的索引,和列表通過偏移量來索引不同垒拢,字典靠的是鍵旬迹。

這便是從字典中提取對應(yīng)的值的用法。和列表相似的是要用[ ]求类,不過因為字典沒有偏移量奔垦,所以在中括號中應(yīng)該寫鍵的名稱,即字典名[字典的鍵]尸疆。

現(xiàn)在請你將小紅的成績也打印出來吧椿猎,親手打打代碼惶岭,才能快速掌握。

老師的答案是這樣子的:

現(xiàn)在你也知道如何取出字典里的值了犯眠。

小剛拿到試卷后按灶,下課后來找你,說把他總分算錯了筐咧,應(yīng)該是92分鸯旁。你看了一下,發(fā)現(xiàn)還真的是嗜浮。于是羡亩,你在成績冊上將90劃掉,改成了92危融。

這個操作在代碼里對應(yīng)的是字典的刪除和增加畏铆。

3、給字典增加/刪除元素

我們還是先來看一個例子吉殃,運行下面的代碼辞居,留意字典怎么刪除以及新增鍵值對:

我們可以發(fā)現(xiàn):刪除字典里鍵值對的代碼是del語句del 字典名[鍵],而新增鍵值對要用到賦值語句字典名[鍵] = 值蛋勺。

那么瓦灶,請你把小剛的成績改成92分吧。對了抱完,新來的小美也考了贼陶,得了85。請你對字典里進(jìn)行修改和新增巧娱,然后將整個字典都打印出來碉怔。

老師的答案是這樣子的:

好了。至此禁添,我們可以總結(jié)一下字典的基礎(chǔ)知識:

三撮胧、列表和字典的異同

列表和字典同作為Python里能存儲多條數(shù)據(jù)的數(shù)據(jù)類型,有許多共同點老翘,也有值得我們注意的不同點芹啥,那么接下來我們先來看看不同點。

1.列表和字典的不同點

一個很重要的不同點是列表中的元素是有自己明確的“位置”的铺峭,所以即使看似相同的元素墓怀,只要在列表所處的位置不同,它們就是兩個不同的列表卫键。我們來看看代碼:

而字典相比起來就顯得隨和很多捺疼,調(diào)動順序也不影響。因為列表中的數(shù)據(jù)是有序排列的永罚,而字典中的數(shù)據(jù)是隨機(jī)排列的啤呼。

這也是為什么兩者數(shù)據(jù)讀取方法會不同的原因:列表有序卧秘,要用偏移量定位;字典無序官扣,便通過唯一的鍵來取值翅敌。

我們先來看第一個共同點:在列表和字典中,如果要修改元素惕蹄,都可用賦值語句來完成蚯涮。看一下代碼:

所以卖陵,上面修改小剛成績的時候遭顶,其實直接用賦值語句即可,del語句通常是用來刪除確定不需要的鍵值對泪蔫。

第二個共同點其實之前已經(jīng)略有提及棒旗,即支持任意嵌套。除之前學(xué)過的數(shù)據(jù)類型外撩荣,列表可嵌套其他列表和字典铣揉,字典也可嵌套其他字典和列表。

先來看看第一種情況:列表嵌套列表餐曹。你在班級里成立了以四人為單位的學(xué)習(xí)小組逛拱。這時,列表的形式可以寫成:

students這個列表是由兩個子列表組成的台猴,現(xiàn)在有個問題是:我們要怎么把小芳取出來呢朽合?

可能你數(shù)著小芳是列表的第7個元素(從0開始),所以想students[7]不就能取到小芳嗎饱狂?

事情當(dāng)然沒有那么簡單曹步,當(dāng)我們在提取這種多級嵌套的列表/字典時,要一層一層地取出來嗡官,就像剝洋蔥一樣:

現(xiàn)在,我們確定了小芳是在students[1]的列表里毯焕,繼續(xù)往下看衍腥。

小芳是students[1]列表里的第三個元素,所以要取出小芳纳猫,代碼可以這么寫:

現(xiàn)在婆咸,發(fā)揮你的聰明才智,從列表中取出小蘭芜辕,并打印出來吧尚骄。

老師的答案是這樣子的:

接下來,我們再來看看第二種情況:字典嵌套字典侵续。

和列表嵌套列表也是類似的倔丈,需要一層一層取出來憨闰,比如說要取出小芳的成績,代碼是這樣寫:

請你仔細(xì)觀察上面的代碼需五,然后嘗試取出小剛的成績鹉动。

老師的答案是這樣子的:

我們再來提高下難度,看看列表和字典相互嵌套的情況宏邮,可以將代碼和注釋結(jié)合起來看泽示。

同樣,現(xiàn)在請你自己試驗一下吧蜜氨,請在下列代碼基礎(chǔ)上 1.打印出字典students里的小剛 2.打印出列表scores里小剛的分?jǐn)?shù)100械筛。

老師的答案是這樣子的:

相信你能成功做出來吧?為你鼓掌飒炎!祝賀你埋哟,對這兩位新朋友的認(rèn)識又更進(jìn)一步。

那么厌丑,這一關(guān)的任務(wù)已經(jīng)圓滿完成啦定欧。記得多復(fù)習(xí),課后練習(xí)也要去做怒竿,能幫助你更好更快地鞏固所學(xué)知識砍鸠。

下一關(guān),我們會開始接觸Python里非常重要的工具——循環(huán)耕驰,有了它爷辱,許多重復(fù)性工作就可以讓計算機(jī)幫我們完成。下一關(guān)見朦肘!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饭弓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子媒抠,更是在濱河造成了極大的恐慌弟断,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趴生,死亡現(xiàn)場離奇詭異阀趴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苍匆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門刘急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浸踩,你說我怎么就攤上這事叔汁。” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵据块,是天一觀的道長码邻。 經(jīng)常有香客問我,道長瑰钮,這世上最難降的妖魔是什么冒滩? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮浪谴,結(jié)果婚禮上开睡,老公的妹妹穿的比我還像新娘。我一直安慰自己苟耻,他們只是感情好篇恒,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凶杖,像睡著了一般胁艰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上智蝠,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天腾么,我揣著相機(jī)與錄音,去河邊找鬼杈湾。 笑死解虱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漆撞。 我是一名探鬼主播殴泰,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浮驳!你這毒婦竟也來了悍汛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤至会,失蹤者是張志新(化名)和其女友劉穎离咐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奉件,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宵蛀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓶蚂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糖埋。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宣吱,死狀恐怖窃这,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤杭攻,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布祟敛,位于F島的核電站,受9級特大地震影響兆解,放射性物質(zhì)發(fā)生泄漏馆铁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一锅睛、第九天 我趴在偏房一處隱蔽的房頂上張望埠巨。 院中可真熱鬧,春花似錦现拒、人聲如沸辣垒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勋桶。三九已至,卻和暖如春侥猬,著一層夾襖步出監(jiān)牢的瞬間例驹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工退唠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留鹃锈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓铜邮,卻偏偏與公主長得像仪召,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子松蒜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355