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)見朦肘!