[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 進階教程)