文科生學(xué)Python系列5: 元組/字典

第三課 的主要內(nèi)容是:

(今天的截圖中運(yùn)行工具不是用Python IDLE了,而是jupyter.)

數(shù)據(jù)結(jié)構(gòu):元組/字典

循壞:while循環(huán)/循環(huán)控制/嵌套循環(huán)

函數(shù):如何自定義函數(shù)

案例講解:工資計(jì)算器函數(shù)

元組:

元組()和列表[ ] 非常相似,都是由若干值組成的一個(gè)序列;

元組中存儲(chǔ)的值可以是任何數(shù)據(jù)類型;

元組(主席臺(tái))中的任何元素都是不可變的,列表(觀眾席)可變;

元組的數(shù)據(jù)結(jié)構(gòu)不需要改變,因而在內(nèi)存使用和表現(xiàn)上,元組比列表更有效率;

可以把列表轉(zhuǎn)換成元組;

元組類型


索引和切片等列表操作也可以使用到元組上

查找元素



元組中的元素是不可修改的,而列表是可以修改的。

看出來了嗎?前面出錯(cuò)的6和7,其實(shí)是不熟悉語句操作造成的。

紅色警報(bào)在6中出現(xiàn),是因?yàn)闆]有引號(hào)表示元素,加上索引列表的時(shí)候,用的是中括號(hào)而不是小括號(hào)。

紅色警報(bào)在7中出現(xiàn),是因?yàn)槔ㄌ?hào)用錯(cuò)了。

8是正確修改列表中的元素的示范。

9表示的是元組中的元素不可修改。錯(cuò)誤提示是“類型錯(cuò)誤”,告訴你在元組中的元素是不能被賦值的。


字典(dictionary)

可以看作是鍵(key)和值(value)之間的一系列一一對(duì)應(yīng)關(guān)系

中間用:冒號(hào)來區(qū)分鍵和值


字典VS列表

列表由整數(shù)作為索引,字典由key作為索引

列表中的元素有順序,按索引0,1,2。。。這么排列

字典中的元素沒有固定順序,常用字符串類型做key

列表和字典都是可變類型,可進(jìn)行增刪改操作

都可以通過 [ ] 獲取元素

列表有序,字典中的元素是無序


在一對(duì)一的查找方面,字典比列表更方便

這是列表查找,略顯冗長(zhǎng)

下圖是用字典來索引上圖內(nèi)容的過程,只需要一步:

字典看起來使用是更方便的

如何獲取字典的 keys 和 values.下圖演示過程。

那個(gè)是單個(gè)序列列出來的,要是想要同時(shí)獲得鍵值對(duì)的話,用items 語句, 得到的每一個(gè)元素都是一個(gè)元組(因?yàn)槎际怯脠A括號(hào)括起來的)

獲取keys和values,還有鍵值對(duì)(16)

我想不明白的是,為什么這里16輸出分鍵值對(duì)之間,不是用冒號(hào)連接而是用逗號(hào)呢?

通過key鍵來獲取value值

上圖中,想要輸出France對(duì)應(yīng)的值,除了直接檢索之外,還可以用到get語句,在這個(gè)語句中得出的結(jié)果是一樣的,但是注意到,用get和不用get還有有一點(diǎn)區(qū)別的,用get的時(shí)候,索引的那個(gè)元素是用圓括號(hào)包裹起來的,而不用get的時(shí)候,是用方括號(hào)包裹起來的。所以,我肯定會(huì)手賤一下,看看要是沒有遵循這個(gè)括號(hào)的區(qū)別,結(jié)果會(huì)是什么:

括號(hào)不對(duì)的運(yùn)行結(jié)果

搜索字典中沒有沒有的Britain這個(gè)元素,結(jié)果是什么呢?

想要在這對(duì)數(shù)據(jù)里面問:“喂,Britain在不在里面啊?” 可以用in語句來查找

答案是False,也就是里面并沒有Britain兄弟?。?/p>

或者用另外一種方式來查找,直接用20那條語句的結(jié)果是出錯(cuò),所以可以用回get語句,要是沒有的話,直接是沒有輸出。

但是有人覺得這程序太沒禮貌了吧!問你一句你一點(diǎn)反應(yīng)都沒有?!所以就有了22語句,意思就是,要是里面有Britain兄弟的話,你就跟我說一聲Unknown吧,至少有回應(yīng)啊!

請(qǐng)注意,這里包裹起來的語句之間,用的是逗號(hào)。

字典的增刪改:

增加元素

增加字典內(nèi)容

我在這對(duì)數(shù)據(jù)里面找不到Britain兄弟怎么辦?那我把它加進(jìn)去唄!用索引形式的方括號(hào)包裹Britain兄弟,后面賦值 London,然后我們重新輸出Europe,里面就有剛加進(jìn)去的Britain了!

而在這個(gè)過程之中,可以看到輸出的結(jié)果并沒有按照之前的順序來排列,所以也可以看出:字典中的元素是沒有順序的。

修改元素

修改字典元素

需要修改元素,把小寫變成大寫,重新賦值,就可以了。

刪除元素

刪除字典元素

還是一樣的套路,用del 語句。

拿回我們上節(jié)課的案例,還記得我們上節(jié)課還不會(huì)字典這個(gè)東西,只會(huì)序列的時(shí)候,是用了多少步才走到最后嗎?今天學(xué)了一樣新技能,簡(jiǎn)化了多少!

案例

過程中把獲取單詞列表的split語句打錯(cuò)了,結(jié)果有是紅色警報(bào),就是說找不到那個(gè)錯(cuò)誤的命令是什么,所以我開始理解“腳本”的意思其實(shí)是在基礎(chǔ)鏈上定義很多個(gè)含義,然后后面運(yùn)行時(shí)直接打那個(gè)碼,就能在當(dāng)初設(shè)定的范圍里面運(yùn)行出那個(gè)值。

這個(gè)案例挺多新的知識(shí)點(diǎn)要學(xué)的:

split語句來獲取單詞列表,也就是可以把重復(fù)的單詞重新列出來,每個(gè)數(shù)量只有1;

用dict語句來初始化一個(gè)空的字典;

用word來賦值一個(gè)初始為0的字典,在words中查找,得出一個(gè)新的字典;

用循環(huán)for。。。in。。。來遍歷序列里面的元素,“遍歷”這個(gè)詞真的是莫名高大上!

還有這篇前文提到的怎么找Britain兄弟,要是不在的話程序也得喊一聲這個(gè)功能,這里是用 counts[word] = counts.get (word,0) +1 來實(shí)現(xiàn)的。也就是要是在遍歷words這個(gè)字典中的元素中找到一個(gè)相同的值,那就在這個(gè)值上面+1,要是找不到這個(gè)值,那就輸出為0.

所以最后的結(jié)果就是這樣啦!和上節(jié)課的結(jié)果是一毛一樣的!

然而,我很好奇,為什么Python里面的詞一定就是要那個(gè)詞呢?其他詞不行嗎?就像上面,為什么一定要用 counts,我用 datas 取代 counts 試了試

用 datas 取代 counts


“不能賦值”,所以詞還是要老實(shí)跟著打?

可是我怎么知道每個(gè)詞在程序里面的含義呢????

這個(gè)案例是為了找出這句話中出現(xiàn)最高詞頻的詞以及它的次數(shù),前面是把這兩個(gè)要統(tǒng)計(jì)的詞和數(shù)梳理出來了,下面就是要在梳理的結(jié)果之后得出最高值

找出最高詞頻的單詞

這種 a.b 的語句好像 a 都是賦值過的序列或者字典,而 b 是已經(jīng)定義好的腳本。在上圖是把 bigcount 和 bigword 初始化,然后用循環(huán)語句和 or 語句運(yùn)行,最后找到最大值和最大值的數(shù)量。

在 “ for word,count in counts. items(): ” 中,word和 count 是一組鍵值對(duì),這個(gè)鍵值對(duì)在counts這個(gè)鍵值對(duì)中找東西,就像前文在Europe中找Britain一樣。

items搭配在這里,為了顯示counts這個(gè)鍵值對(duì)更加明顯?

下面的語句是逐一篩選,如果這個(gè)值C大于剛剛那個(gè)值D,那這個(gè)值C就是新的輸出,取代了D。

最后得出了結(jié)果最高詞頻是the ,出現(xiàn)次數(shù)為7

最后是作業(yè)的檢驗(yàn):

作業(yè)3-1

然而,前面用了兩千多個(gè)字和那么多圖的講解,把自己看作是一個(gè)白癡講了一天,我理解的做法是這樣的:

第一下,直接是Europe['France' :capital ], ?此時(shí)想浮起微笑面對(duì)這個(gè)白癡。這個(gè)時(shí)候還是學(xué)不會(huì)字符上加引號(hào)!都第三節(jié)課了?。。?/p>

然而加了引號(hào)的33號(hào)運(yùn)行,還是錯(cuò)誤的,那我加一個(gè)方括號(hào)啊!還是錯(cuò)誤。。。

然后我去作業(yè)區(qū),偷看同學(xué)們的作業(yè)是怎么做的,自己運(yùn)行一遍:

加入一個(gè)鍵值對(duì),好像比找巴黎要容易一點(diǎn),畢竟也是對(duì)著打了4遍了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容