[6] Python列表

1. 概述

今天我們要看一下Python中的列表。加粗體代表我們已經介紹的內容,斜體代表新增內容。

  • 計算機編程的原理簡要介紹
  • 集成開發環境PyCharm
  • 變數名、數字、字元串、列表
  • 句式
  • 輸入和輸出
  • 條件判斷語句
  • 循環語句
  • 注釋
  • 函數
  • 模塊和引入
  • 各類數據結構

2. 列表

列表(list),顧名思義就是一個清單,裡面按順序排好了一堆數據。我們先看一下列表長啥樣。舉例:

list_example = [1, 2.0, "three", 4]

第一個數據是1,第二個數據是2.0,第三個數據是字元串three,第四個數據是個整數4,全用逗號隔開。

Python的一個好處是它比較靈活,列表裡的數據類型可以多種多樣,不需要統一全是同一個類型的數據(比如沒有必要全是整數或者全是字元串)。

3. 從0開始數數

和字元串一樣,列表裡面要數,也是從0開始,比如

#首先定義一個列表courses = ["math", "physics", "chemistry", "biology", "history"]#顯示第1個、第2個和第3個元素和最後一個數據print(courses[0]) #mathprint(courses[1]) #physicsprint(courses[2]) #chemistryprint(courses[-1]) #history#顯示第2個到第4個元素print(courses[1:3]) #["physics", "chemistry"]#顯示第1個(開頭)到第3個數據print(courses[0:3]) #["math", "physics", "chemistry"]print(courses[:3]) #["math", "physics", "chemistry"]#顯示第2個到最後一個(在這裡是第5個)數據print(courses[1:5]) #["physics", "chemistry", "biology", "history"]print(courses[1:]) #["physics", "chemistry", "biology", "history"]#顯示所有數據print(courses[:]) #["math", "physics", "chemistry", "biology", "history"]print(courses) #["math", "physics", "chemistry", "biology", "history"]

我們可以看到所有都是從0開始標起,如果取單個元素,最後結果的類型就是那個元素的類型,如果取多個元素,結果還是一個列表。在截取多個元素時,也遵循和字元串一樣的規則:

var[a:b]包含列表var中從下標為a開始至下標為b-1的元素,同樣適用於負數下標。

沒有頭下標a即從最前面的(下標為0)的元素開始截至下標為b-1。

沒有尾下標b即為截取到最後一個元素。

4. 使用列表

要使用列表,我們需要掌握三個基本操作:

  • 添加
  • 刪除
  • 修改

以及其他的一些函數,我將簡單介紹幾個有用的,其他的大家可以自行上網搜索並試著自己打代碼探索。

第一個:添加元素

要添加某個元素,我們需使用insert函數:

list_name.insert(index_number, element)

例:

#首先定義一個列表example = ["A", "B", "C", "D"]#在下標為2處添加新元素example.insert(2, "inserted element")print(example) #["A", "B", "inserted element", "C", "D"]

我們可以在結果里看到,新添的片語被放在在第三個位置(下標為2),而原來位置上的C被往後推了一個格。

如果我們想在最後位置上添加一個元素,我們可以用append函數。

example.append("last element")

當然我們也可以用insert,

example.insert(4, "last element")

但是insert明顯沒有append看上去簡潔易懂,而且由於要數第幾個第幾個元素很容易出錯,如果要在最後添加新元素的話,我還是建議用append。

第二個:刪除元素

用del list[index]即可,英語不好的同學可以記住刪除的英文是delete,del可以看作是個縮寫。

#首先定義一個列表example = ["A", "B", "C", "D"]#刪除第一個元素del example[0]print(example) #["B", "C", "D"]

我們還可以用remove函數:

#首先定義一個列表example = ["A", "B", "X", "D", "X"]#刪除第一個Xexample.remove("X")print(example) #["A", "B", "D", "X"]

remove函數會尋找列表中第一個符合括弧里數據的元素,我們可以看到在這個例子中第三個字母(remove看到的第一個X)被刪除了,而最後一個X還保留著。

第三個:修改已有數據

如果我們要修改某個數據,我們直接賦值即可實現。

#首先定義一個列表example = ["John", "Sam", "Alice", 2017]#修改最後一位上的數據example[-1] = "Lucy"print(example) #["John", "Sam", "Alice", "Lucy"]

2017已經被成功改為人名Lucy。

5. 一些列表使用技巧

+:合併兩個列表,[1, 2, 3] + ["a", "b"] 生成 [1, 2, 3, "a", "b"]*:重複列表,[1, 2] * 3 = [1, 2, 1, 2, 1, 2]len(list): 數列表裡有幾個元素,len([9, 8, 7, 6]) 數出4list_name.reverse(): 把列表的元素反過來排序。list_name.index(object): 在列表裡找出匹配括弧里數據的第一個元素的下標。list_name.pop(): 從列表移除(不是刪除)最後一個元素,移除的元素可以被拿出來用。list_name.pop(index): 從列表移除(不是刪除)該下標處的元素,移除的元素可以被拿出來用。

最後兩個pop,我們可以來看一下具體應用:

fruits = ["apple", "pear", "peach", "melon"]# 移除第二個元素(也就是pear)popped_fruit = fruits.pop(1)print(popped_fruit) #pearprint(fruits) #["apple", "peach", "melon"]

我們可以看到pop可以從列表中移除指定元素,移除的元素可以賦給其他變數,可以拿來用在別的地方。

6. extend函數

我們可以用加號來合併倆列表,我們也可以用extend函數來實現列表的延展。

a = [1, 2, 3]b = [4, 5]#把a、b合併,兩種方法c = a + ba.extend(b)#現在c和a應該長一個樣子print(c) #[1, 2, 3, 4, 5]print(a) #[1, 2, 3, 4, 5]

我們可以看到我們沒有把a.extend(b)賦值給新變數,原因是extend函數會把b直接添加進a的列表後面。或者我們可以把其在表面上理解成a.extend(b)等同於a = a + b。

然後,extend的優點在於,比如在a.extend(b)中,b的類型不一定要是列表,它也可以是元組、字典或者集合,這三個東西我們會在之後的「數據結構」中著重介紹。如果使用a = a + b,則a和b都必須是列表。

同樣是添加元素,extend和append也有一定區別:

#定義一個數字列表,單個數字,和另外一個由兩個數字組成的列表numbers = [1, 2, 3]four = 4five_and_six = [5, 6]#附上fournumbers.append(four)print(numbers) #[1, 2, 3, 4]#附上列表five_and_sixnumbers.append(five_and_six)print(numbers) #[1, 2, 3, 4, [5, 6]]

我們可以看到結果和我們想要的不一樣,這[1, 2, 3, 4, [5, 6]]可謂逼死強迫症,趕跑OCD。我在一開始也說過,列表裡面不限制數據類型,也就是列表裡某一個數據也可以是一個列表。這麼說有點繞,我們可以這麼來:

#接著上面的代碼,對於[1, 2, 3, 4, [5, 6]]這個列表print(len(numbers)) #5,意思是長度為5,有五個元素print(numbers[0]) #1print(numbers[1]) #2print(numbers[2]) #3print(numbers[3]) #4print(numbers[4]) #[5, 6]

雖然有六個數字,但是只有五個元素,最後一個元素的類型是一個含有兩個數的列表。這麼一看我們可以總結:append函數只是在列表最後增加一個元素,而該元素不管是什麼數據類型,都只是作為被添加的列表的一個元素而存在。

我們再來看看extend函數,刪除以上代碼,另起一段:

#定義一個數字列表,單個數字,和另外一個由兩個數字組成的列表numbers = [1, 2, 3]four_and_five = [4, 5]six = 6#附上4和5numbers.extend(four_and_five)print(numbers) #[1, 2, 3, 4, 5]

extend將新增的列表拆開來,裡面的元素一個一個添加進去,可以理解為列表合併、延展。我們再寫下去:

#附上sixnumbers.extend(six)

報錯啦報錯啦!這行代碼是實現不了的,因為extend括弧里一定要是一堆數據(其實是類似列表的集合型數據),而不能是單個數據(數字、字元串)。那麼如果我們一定要用extend來增加一個數據怎麼辦?只要把

six = 6

這行改成

six = [6]

這樣six也是一個列表了,雖然是只有一個數據的列表,但是畢竟是列表,叫都叫列表了,那就是屬於「一堆數據」了,世界就是這麼不公平,有時候多穿一件衣服可以改變你的命運。

7. 其他

這裡可以說是查漏補缺了,首先,如果我們沒想好這個列表裡放什麼,想要以後慢慢加進來,我們可以使用空白列表:

a = []

然後可以通過上面介紹的各種神操作來添加數據,我們也可以搞只有一個元素的列表:

a = ["John"]

這也是一個列表,但這個列表只有一個數據。列表中的數據用逗號隔開,有時候你可以看到最後多出一個逗號:

b = [1, 2, 3, "John", 4, ]

最後多出的逗號可有可無,屬於有些公司的代碼格式要求或者一些程序猿的打碼習慣。當然關於列表還有很多內容,這裡不能一一介紹,大家也可以上網查Python3的文檔,按照自己需求使用各種函數。我們馬上就要介紹輸入和輸出了,會了輸入和輸出後,我們就能開始寫一些簡單的小程序。

推薦閱讀:

Python機器學習實踐—決策樹
25 歲才開始學習編程靠譜嗎?40 歲都不晚!
想參考一些用 Python 做機器學習或數據挖掘的例子和資源,如何獲取?
基於 Python 來編寫 Poc/Exp 該怎麼入門?
零: 深度學習Theory&Code從0到1——先導篇之matplotlib 進階教程)

TAG:Python | 计算机科学 | 编程 |