陳新龍
Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性、面向?qū)ο蟮哪_本語言。相比其他語言其語法結(jié)構(gòu)更具可讀性。之前我們用Python解決了許多數(shù)學(xué)問題,還制作了小游戲,并用于數(shù)據(jù)分析,但如果不系統(tǒng)性地梳理Python核心語法會(huì)影響我們未來的提高,本期開始我們一起系統(tǒng)學(xué)習(xí)Python的基礎(chǔ)知識(shí)。
不知道細(xì)心的你是否注意到,之前解數(shù)學(xué)題或利用爬蟲分析大數(shù)據(jù),都用到了列表(list)。Python的列表十分強(qiáng)大,被認(rèn)為是Python中最核心的部分,很多操作都需要基于列表來實(shí)現(xiàn)。今天我們來具體講一講列表以及和它相似的元組。
一、列表
1. 列表的定義:我們可以把列表當(dāng)作一種容器,用它來存放數(shù)據(jù)??梢栽谄渲写娣畔嗤愋偷臄?shù)據(jù),也可以存放不同類型的數(shù)據(jù),但是為了提高程序的可讀性,建議在一個(gè)列表中存放同一種數(shù)據(jù)類型(圖1)。
2. 數(shù)值列表的創(chuàng)建(list()函數(shù)):當(dāng)我們需要?jiǎng)?chuàng)建擁有一定數(shù)值的列表,而又不想手動(dòng)輸入時(shí),可以用list()函數(shù)嵌套range()函數(shù)直接進(jìn)行創(chuàng)建。但是需要注意range()函數(shù)中遵循左閉右開的規(guī)則(圖2)。
3. 刪除列表:可以用del語句刪除不需要的列表。通過報(bào)錯(cuò)的提示我們可以知道創(chuàng)建的列表已經(jīng)成功刪除了(圖3)。
4. 列表復(fù)制:當(dāng)需要某個(gè)列表的副本時(shí),就需要復(fù)制列表中的元素。請(qǐng)思考一下,如果先定義一個(gè)列表,然后再定義第二個(gè)列表,讓第二個(gè)列表等于第一個(gè)列表,當(dāng)我們修改第一個(gè)列表中的值后,第二個(gè)列表中的對(duì)應(yīng)值會(huì)跟著改變嗎?你會(huì)發(fā)現(xiàn)復(fù)制的列表會(huì)跟隨第一個(gè)列表中的元素值改變,說明了它們是使用的同一列表。通過訪問id也可以確定兩個(gè)列表地址相同(圖4)。
以上是關(guān)于列表的基礎(chǔ)小知識(shí),當(dāng)然我們?cè)谟玫搅斜頃r(shí)還有很多技巧性的知識(shí)包括列表的推導(dǎo)式或列表的函數(shù)等等,在以后的學(xué)習(xí)中會(huì)逐步涉及。
二、元組
了解了列表后,我們?cè)賮砜纯春土斜硐嗨频脑M,元組是一種不可改變的序列,它和列表相似,主要的區(qū)別就是元組創(chuàng)建之后,就不能再對(duì)里面的元素進(jìn)行增刪操作了。我們用中括號(hào)表示列表,用小括號(hào)表示元組。
1. 創(chuàng)建元組:創(chuàng)建元組的方式和創(chuàng)建列表的方式相同,可以直接創(chuàng)建,也可以通過range()函數(shù)來創(chuàng)建(圖5)。
2. 刪除元組:刪除元組的方式和列表相同,直接使用del語法進(jìn)行刪除,形式如圖6,刪除成功后,元組不存在,再輸出就會(huì)報(bào)錯(cuò)(圖6)。
3. 訪問和修改元素:我們?cè)谠L問元組元素時(shí)是根據(jù)索引位置去找到所要訪問的元素。索引相信大家都不陌生,在Scratch的列表中我們已經(jīng)用過。(注意:索引的值從0開始)首先我們創(chuàng)建一個(gè)列表和元組。當(dāng)索引值在正確的范圍內(nèi)找出值,當(dāng)超出范圍后則報(bào)錯(cuò)(圖7)。
因?yàn)樵M是不可變的數(shù)列,列表是可以變的數(shù)列,所以我們可以對(duì)列表元素進(jìn)行直接修改,但是不可以對(duì)元組元素進(jìn)行修改。如果想通過索引值修改元組元素的話會(huì)出現(xiàn)錯(cuò)誤信息。我們非要修改元組中的元素就要采用其他的方法,通常會(huì)采用兩種方式,一種是重新賦值法,一種是類型轉(zhuǎn)換法(圖8)。
元組相對(duì)于列表缺少了一些靈活,但一是元組的性能比較高,元組的處理速度要快于列表。二是它更安全,當(dāng)數(shù)據(jù)規(guī)模較大時(shí),使用元組能保障重要數(shù)據(jù)不會(huì)被竄改,用在存儲(chǔ)方面是一個(gè)很好的選擇??傊涀×斜硎强梢蕴砑觿h改元素。