Python 學習 —— 基礎篇(三)

List—列表

創建list

Python內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。

比如,列出班里所有同學的名字,就可以用一個list表示:

list是數學意義上的有序集合,也就是說,list中的元素是按照順序排列的。

構造list非常簡單,按照上面的代碼,直接用 [ ] 把list的所有元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變量,這樣,就可以通過變量來引用list:

由于Python是動態語言,所以list中包含的元素并不要求都必須是同一種數據類型,我們完全可以在list中包含各種數據:

一個元素也沒有的list,就是空list:


列表生成

要生成list[1,2,3,4,5,6,7,8,9,10],我們可以用range(1,11):

但如果要生成[1×1, 2×2, 3×3, …, 10×10]怎么做?方法一是循環:

但是循環太繁瑣,而列表生成式則可以用一行語句代替循環生成上面的list:

這種寫法就是Python特有的列表生成式。利用列表生成式,可以以非常簡潔的代碼生成 list。

寫列表生成式時,把要生成的元素 x * x 放到前面,后面跟 for 循環,就可以把list創建出來,十分有用,多寫幾次,很快就可以熟悉這種語法。

按照索引訪問list

由于list是一個有序集合,所以,我們可以用一個list按分數從高到低表示出班里的3個同學:

那我們如何從list中獲取指定第 N 名的同學呢?方法是通過索引來獲取list中的指定元素。

需要特別注意的是,索引從 0 開始,也就是說,第一個元素的索引是0,第二個元素的索引是1,以此類推。

因此,要打印第一名同學的名字,用 L[0]:

要打印第二名同學的名字,用 L[1]:

要打印第三名同學的名字,用 L[2]:

要打印第四名同學的名字,用 L[3]:

報錯了!IndexError意思就是索引超出了范圍,因為上面的list只有3個元素,有效的索引是 0,1,2。

所以,使用索引時,千萬注意不要越界

倒序訪問list

我們還是用一個list按分數從高到低表示出班里的3個同學:

這時,老師說,請分數最低的同學站出來。

要寫代碼完成這個任務,我們可以先數一數這個 list,發現它包含3個元素,因此,最后一個元素的索引是2:

有沒有更簡單的方法?有!

Bart同學是最后一名,俗稱倒數第一,所以,我們可以用 -1 這個索引來表示最后一個元素:

Bart同學表示躺槍。

類似的,倒數第二用 -2 表示,倒數第三用 -3 表示,倒數第四用 -4 表示:

L[-4] 報錯了,因為倒數第四不存在,一共只有3個元素。

使用倒序索引時,也要注意不要越界

添加新元素

現在,班里有3名同學:

今天,班里轉來一名新同學 Paul,如何把新同學添加到現有的 list 中呢?

第一個辦法是用 list 的 append() 方法,把新同學追加到 list 的末尾:

append()總是把新的元素添加到 list 的尾部。

如果 Paul 同學表示自己總是考滿分,要求添加到第一的位置,怎么辦?

方法是用list的 insert()方法,它接受兩個參數,第一個參數是索引號,第二個參數是待添加的新元素:

L.insert(0, ‘Paul’) 的意思是,’Paul’將被添加到索引為 0 的位置上(也就是第一個),而原來索引為 0 的Adam同學,以及后面的所有同學,都自動向后移動一位。

刪除元素

Paul同學剛來幾天又要轉走了,那么我們怎么把Paul 從現有的list中刪除呢?

如果Paul同學排在最后一個,我們可以用list的pop()方法刪除:

pop()方法總是刪掉list的最后一個元素,并且它還返回這個元素,所以我們執行 L.pop() 后,會打印出 ‘Paul’。

如果Paul同學不是排在最后一個怎么辦?比如Paul同學排在第三:

要把Paul踢出list,我們就必須先定位Paul的位置。由于Paul的索引是2,因此,用 pop(2)把Paul刪掉:

替換元素

假設現在班里仍然是3名同學:

現在,Bart同學要轉學走了,碰巧來了一個Paul同學,要更新班級成員名單,我們可以先把Bart刪掉,再把Paul添加進來。

另一個辦法是直接用Paul把Bart給替換掉:

對list中的某一個索引賦值,就可以直接用新的元素替換掉原來的元素,list包含的元素個數保持不變。

由于Bart還可以用 -1 做索引,因此,下面的代碼也可以完成同樣的替換工作:

切片—對list進行切片

取一個list的部分元素是非常常見的操作。比如,一個list如下:

取前3個元素,應該怎么做?

笨辦法:

之所以是笨辦法是因為擴展一下,取前N個元素就沒轍了。

取前N個元素,也就是索引為0-(N-1)的元素,可以用循環:

對這種經常取指定索引范圍的操作,用循環十分繁瑣,因此,Python提供了切片(Slice)操作符,能大大簡化這種操作。

對應上面的問題,取前3個元素,用一行代碼就可以完成切片:

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。

如果第一個索引是0,還可以省略:

也可以從索引1開始,取出2個元素出來:

只用一個 : ,表示從頭到尾:

因此,L[:]實際上復制出了一個新list。

切片操作還可以指定第三個參數:

第三個參數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。

把list換成tuple,切片操作完全相同,只是切片的結果也變成了tuple。

倒序切片

對于list,既然Python支持L[-1]取倒數第一個元素,那么它同樣支持倒數切片,試試:

記住倒數第一個元素的索引是-1。倒序切片包含起始索引,不包含結束索引。

對字符串切片

字符串 ‘xxx’和 Unicode字符串 u’xxx’也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串:

在很多編程語言中,針對字符串提供了很多各種截取函數,其實目的就是對字符串切片。Python沒有針對字符串的截取函數,只需要切片一個操作就可以完成,非常簡單。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容