4. 列表一學完,Python 會一半,滾雪球學 Python

滾雪球學 Python,目標就是讓 Python 學起來之後,越滾越大。

已完成的文章

標題 鏈接
1. 這纔是 Python 學習的正確起手姿勢,滾雪球學 Python https://dream.blog.csdn.net/article/details/109586142
2. 無門檻學會數據類型與輸入、輸出函數,滾雪球學 Python https://dream.blog.csdn.net/article/details/109697047
3. 無轉折不編程,滾雪球學 Python https://dream.blog.csdn.net/article/details/109785235

本系列文章將在2021年春節前完成,歡迎關注,點贊,評論 --- 夢想橡皮擦

四、列表一學完,Python 會一半

4.1 列表是個啥

列表,先記住英文爲 list ,它是 Python 中一種可以動態添加刪除內容的數據類型,由一系列的元素組成。直白點說列表是將多個變量組合在一起的那麼一個容器。

很多文章會找一個與列表相似的編程概念,一般會說 Python 中的列表跟其他語言的數組一樣,但對於沒有任何編程概念的同學來說,數組也是一個陌生概念。其實你可以簡單理解一下即可,Python 中的列表就是一個容器,裏面可以放任意數據類型的變量。

4.1.1 列表定義

列表定義的格式如下

my_list = [元素1,元素2,元素3...]

列表的每一個數據都稱作元素或者項,列表用 [] 包裹,每一個元素用英文 , 分隔,列表可以直接打印輸出。

my_list = ["apple", "orange", "grape", "pear"]
print(my_list)

列表中的元素可以爲相同數據類型,也可爲不同數據類型,所以列表嵌套列表也是可行的。

my_list = [1, "orange", True, 1.0, [1, 2, 3]]
print(my_list)

4.1.2 列表讀取

列表的讀取需要先學習兩個名詞,一個是索引,另一個是下標,這兩個詞是同一個意思,都是爲了準確的獲取列表中的元素。索引先簡單理解成序號一類的概念即可。

首先你要學會的是列表中索引是從 0 開始的,這個概念第一次接觸有點楞,熟悉了就會好很多。就像我們數數字都是從 1 開始數,忽然間需要變成從 0 開始數了,需要適應期。

例如在看一下剛纔的列表,嘗試用中文讀取出來每一個元素的索引。

my_list = ["apple", "orange", "grape", "pear"]

索引爲 0 的元素是字符串 apple,索引爲 1 的元素是字符串 orange,依次類推。

列表讀取的語法格式如下:

# 列表名[索引]
my_list[i]

以上內容轉換成 Python 代碼爲:

my_list = ["apple", "orange", "grape", "pear"]
print("索引爲0的元素是:", my_list[0])
print("索引爲1的元素是:", my_list[1])
print("索引爲2的元素是:", my_list[2])
print("索引爲3的元素是:", my_list[3])

通過索引獲取元素的時候,一定要注意索引是從 0 開始的,從 0 開始的,雖然反覆寫,但是還是很容易被忘記… 唉~

索引除了爲正數以外,還可以爲負數,獲取列表的最後一個元素的索引是 -1,代碼如下:

nums = [1,2,3,4,5,6]
print("列表最後一個元素爲:",nums[-1])

依據順序,-1 表示最後一個元素,-2 表示倒數第 2 項…

4.1.3 列表切片

編寫程序時對列表的操作經常會有如下場景。

  • 獲取 1~3 項元素;
  • 獲取 4~7 項元素;
  • 獲取第 1,3,5…項元素。

這些內容轉換到列表的實際編碼中,被稱爲切片操作,就是你腦中現在呈現的切肉片動作。
具體的語法格式如下:

# 讀取從索引 m 到 n-1 的列表元素
my_list[m:n]
# 讀取列表的前 n 項元素
my_list[:n]
# 讀取列表從 m 開始到結尾的元素
my_list[m:]
# 間隔 s,讀取從 m 到 n 的列表元素
my_list[m:n:s]

以上內容反映到代碼中呈現如下,該部分呈現到代碼中如下,尤其注意 m 與 n 的取值。

my_list = ["a","b","c","d","e","f"]

# 輸出 ['a', 'b', 'c'] 注意 a,b,c 的索引分別是 0,1,2
print(my_list[0:3])
# 輸出 ['b', 'c', 'd', 'e'] 注意 b,c,d,e 的下標分別是 1,2,3,4
print(my_list[1:5])
# 輸出 ['b', 'c', 'd', 'e', 'f']
print(my_list[1:])
# 輸出 ['a', 'b', 'c', 'd', 'e']
print(my_list[:5])
# 輸出 ['b', 'd']  從索引 1 到索引 3,間隔 1 個索引取
print(my_list[1:4:2])

列表切片在後續的 Python 學習中屬於非常重要的知識點,核心還是理清楚索引是如何對應到列表中每一項元素。

4.1.4 列表相關內置函數

在 Python 中與列表相關的內置函數常見的有 4 個,分別是獲取最大值 max、最小值 min、求和 sum 以及獲取列表元素個數 len。

最大值與最小值

使用 max 與 min 函數可以直接獲取列表中的最大值與最小值,該函數使用有些注意事項需要了解下,具體還是參照代碼:

my_list1 = ["a","b","c","d","e","f"]
my_list2 = [1,2,3,4,5,6]
my_list3 = ["a",1,2,3,4]

# 輸出 f
print(max(my_list1))
# 輸出 6
print(max(my_list2))
# 報錯
print(max(my_list3))

上述代碼在運行時發現,前面 2 個列表可以輸出最大值,但是第三個直接報錯,這是因爲 max 與 min 只能用於元素全是數字或者全是字符串的列表,如果列表中有其他數據類型或者數字與字符串混合就會報錯。

min 用法和 max 完全一致,不在編寫代碼嘗試。

求和
sum 函數可以獲取列表元素總和,但是需要注意下 sum 不能用於元素非數值情況,也就說下面的代碼是錯誤的。

my_list1 = ["a","b","c","d","e","f"]
print(sum(my_list1))

獲取列表元素個數
該函數使用頻次極高,在很多地方都需要獲取列表元素個數,使用 len 函數即可,由於代碼非常簡單,自行測試即可。

4.1.5 列表元素的修改與刪除

對於一個列表數據類型的變量來說,它是可以進行修改與刪除元素的,這就是本文開篇提及的列表是 Python 中一種可以動態添加刪除內容的數據類型(該小節暫時還無法對列表進行動態添加,後文會講解到)。
列表的元素可以通過索引進行獲取修改。

my_list1 = ["a","b","c","d","e","f"]
print("修改前的列表",my_list1)
my_list1[4] = "橡皮擦"
print("修改後的列表",my_list1)

列表元素的刪除操作分爲兩種情況,簡單說一種是刪除單個元素,一種是刪除多個元素。刪除與列表切片關聯度極高,可比對下述代碼進行學習。

my_list1 = ["a","b","c","d","e","f"]

# 通過索引刪除某一元素
del my_list1[0]
print(my_list1)

my_list1 = ["a","b","c","d","e","f"]
# 通過索引刪除列表區間元素
del my_list1[0:3]
print(my_list1)

my_list1 = ["a","b","c","d","e","f"]
# 通過索引刪除列表區間元素
del my_list1[0:3:2]
print(my_list1)

刪除操作使用的關鍵字是 del,關鍵點相信你也已經發現,通過索引找到元素然後在通過del刪除元素。

以上內容,請注意是對列表中的元素進行操作,下面我們將學習如何對一個完整的列表進行操作。

4.1.6 列表相加,相乘,刪除

在 Python 中可以直接對列表進行相加與相乘操作,列表與列表之間的相加可以理解爲列表的連接,代碼如下:

my_list1 = ["a","b"]
my_list2 = ["c"]
my_list3 = my_list1 + my_list2
print(my_list3)

任意多個列表直接如果用 “+” 進行操作,那麼這些列表將會連接起來形成一個新的大列表。

列表可以與一個數字進行乘法計算,表示重複前面的列表多次,例如下述代碼:

my_list1 = ["a","b"]
my_list2 = ["c"]
my_list3 = my_list1 * 4
# 輸出結果爲 ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
print(my_list3)

上述代碼用 [a,b] * 4 得到結果爲列表 [a,b] 重複出現了 4 次。

4.2 初識 Python 面向對象

Python 是一門面向對象的編程語言,所以在 Python 中所有的數據都是對象,例如之前學習到的整數、浮點數、字符串、列表都是對象,關於面向對象的概念不做過多的解釋(畢竟現在解釋也沒啥用,具體等學到面向對象部分在進行說明)。

我們可以給各種對象設計一些 方法,這些 方法 也是廣義上的 函數,是不是聽起來有些繞,在 Python 中已經爲一些基本對象內置了一些方法,從列表開始我們將逐步接觸對象的內置方法。

對象方法的調用語法格式爲:

對象.方法()

4.2.1 字符串對象的方法

你首先要知道在 Python 中任意一個數據都是對象,那聲明一個字符串變量之後,那這個字符串變量就是一個對象,是對象就會有對象的方法。字符串常用的方法有:

  1. lower 將字符串轉換成小寫
  2. upper 將字符串轉換成大寫
  3. title 將字符串首字母大寫,其餘小寫
  4. rstrip 移除字符串右側空白
  5. lstrip 移除字符串左側空白
  6. strip 移除字符串兩側空白

字符串大小寫說明

my_str = "good moring"
my_strU = my_str.upper()
my_strL = my_str.lower()
my_strT = my_str.title()

# 大寫
print(my_strU)
# 小寫
print(my_strL)
# 首字母大寫
print(my_strT)

輸出結果對應如下:

GOOD MORING
good moring
Good Moring

移除字符串開始或者結尾的空白是非常有用的方法,該內容留給你自己來完成。代碼可以參考 my_str.strip()

4.2.1 快速獲取系統內置方法

在實際開發中,我們很難記住一個對象的所有方法,對於橡皮擦來說編寫代碼的時候也要藉助於手冊,方法太多不可能記住的,常用的記住就好了,那如何查詢一個對象的所有方法呢,用到的是一個內置函數 dir
例如,你想知道一個字符串對象的所有方法,可以編寫如下代碼。

my_str = "good moring"
print(dir(my_str))

代碼運行之後,會得到如下內容,其中紅框內容就是剛纔提及到的方法。
4. 列表一學完,Python 會一半,滾雪球學 Python
對於某個方法是如何使用的,可以調用之前學習的 help 內置函數進行學習,語法格式如下:

help(對象.方法)

例如獲取字符串對象的 rfind 方法。

my_str = "good moring"

print(help(my_str.rfind))

結果如下,稍微閱讀一下即可瞭解 rfind 方法的使用方式。

4. 列表一學完,Python 會一半,滾雪球學 Python
查看一下列表的方法
因爲後續將繼續學習列表的方法,所以先進行簡單展示。

my_list1 = ["a","b"]
print(dir(my_list1))

本篇博客後續內容將對紅框部分的方法進行講解,肯定有人會關心沒有在紅框裏面的哪些以兩個_開頭的是啥,它們也是方法,不過現在還不到學習它們的時候。
4. 列表一學完,Python 會一半,滾雪球學 Python

4.3 通過方法增刪列表元素

4.3.1 列表追加元素

在操作列表時候經常會出現如下場景,需要往已經存在的列表中追加元素,例如原列表有一個元素,現在想追加到兩個。如果直接設置,會出錯提示索引值超過列表長度,請注意該錯誤在操作列表時經常出現。

my_list = ["apple", "orange", "grape"]
my_list[3] = "pear"

該錯誤提示爲 IndexError: list assignment index out of range ,這裏需要注意下,在學習或編寫代碼的過程中要熟悉一些常見的錯誤,以便當這些錯誤出現的時候能夠快速發現原因。

在列表追加元素,Python 中列表對象內置了一個方法,具體格式如下。

my_list.append("新增元素")

例如接下來可以聲明一個空列表,然後往該列表追加元素。

my_list = []
my_list.append("pear")
my_list.append("apple")
my_list.append("orange")

print(my_list)

通過 append 方法,每次都會在列表的末端追加一個元素,用該方法就可以無限制的將列表擴展下去。

4.3.2 列表插入元素

append 方法是在列表末尾固定插入元素,如何在任意位置插入元素是一個新的方法,名稱叫做 insert,語法格式如下:

my_list.insert(索引位置,"新增元素")

嘗試在索引 1,索引 2,索引 0 的位置插入元素,代碼如下:

my_list = ["pear", "apple", "orange"]
my_list.insert(0, "插入")
print(my_list)
my_list = ["pear", "apple", "orange"]
my_list.insert(2, "插入")
print(my_list)

這裏需要注意下當索引超過列表長度時,默認插入末尾。

4.3.3 刪除列表元素

之前的內容中已經介紹過一種刪除列表元素的方式,通過關鍵字 del,該方式存在一個問題就是刪除元素之後沒有獲取到被刪除的元素。接下來的方法將解決該問題,你將能獲取到被刪除的值,該方法是 pop ,語法格式如下:

item = my_list.pop()
item = my_list.pop(索引)

注意在 pop 方法中可以攜帶一個索引值,直接刪除索引位置的元素,如果沒有默認刪除最後一項。變量 item 用於獲取被刪除的值。注意該方法刪除元素的時候,索引不能超過列表長度。

my_list = ["pear", "apple", "orange"]
item = my_list.pop()
print(item)

print("刪除元素之後")
print(my_list)

代碼運行結果爲:

orange
刪除元素之後
['pear', 'apple']

pop 方法是按照索引刪除元素,你還可以直接刪除指定元素,具體方法是 remove,該方法的語法格式如下。

my_list.remove(待刪除元素內容)

注意 remove 刪除元素之後,不會返回被刪除的元素,還存在一個問題是如果待刪除的元素不在列表中,會提示代碼錯誤。

如果待刪除的元素在列表中出現多個,默認只刪除第一個,如果想要刪除多個,需要用到後面的循環知識。

4.4 列表排序

對於列表除了增刪改以外還會涉及排序相關內容,該操作對於列表對象也非常簡單,使用固定的方法即可。

4.4.1 sort 排序

sort 方法可以對列表元素進行排序,默認從小到大,當然也可以修改成從大到小,該方法一般用於純數字或者純英文字符列表排序,如果列表中的元素數據類型比較複雜,該方式不在適用,需要注意一下。

sort 方法的語法格式如下:

my_list.sort()

聲明一個所有元素都是數字的列表,然後進行排序。

my_list = [3, 4, 1, 2, 9, 8, 7]
print("排序前:", my_list)

my_list.sort()
print("排序後:", my_list)

輸出結果如下:

排序前: [3, 4, 1, 2, 9, 8, 7]
排序後: [1, 2, 3, 4, 7, 8, 9]

如果希望按照從大到下進行排序,只需要增加參數(參數概念後面還會繼續學習)reverse=True 即可。

my_list = [3, 4, 1, 2, 9, 8, 7]
print("排序前:", my_list)

my_list.sort(reverse=True)
print("排序後:", my_list)

英文字符串的排序結果希望你可以進行一下測試,需要注意對英文字符列表進行排序,建議將字符串英文全部修改爲小寫。

注意上述 sort 方法排序之後是對原列表中元素順序修改,即修改的是 my_list 列表的順序,如果不想修改原列表的順序,想要新生成一個列表,需要用到的是下述方法。

4.4.2 sorted 排序

sort 排序將造成列表元素順序永久修改,很多時候並不需要修改原列表,這種情況下需要藉助 sorted 函數,注意 sorted 是一個內置函數,並不是列表對象的一個方法,也就是說 sorted 可以用於很多對象的排序。

sorted 函數的語法格式如下:

sorted(待排序列表) # 正序,從小到大
sorted(待排序列表,reverse=True) # 逆序,從大到小

該函數使用之後會返回一個新的列表,你可以用新變量接收一下,具體代碼如下:

my_list = [3, 4, 1, 2, 9, 8, 7]
print("排序前:", my_list)

new_list = sorted(my_list)
print("排序後:", my_list)
print("排序後:", new_list)

注意排序後新變量爲 new_list 對於原 my_list 列表中元素的順序並無影響。

4.5 列表其它方法

4.5.1 列表檢索元素索引

通過 index 方法可以獲取某內容在列表中第一次出現的索引值,格式如下:

索引值 = my_list.index(待查找值)

該方法注意如果沒有檢索到索引值,會提示錯誤。

my_list = [3, 4, 1, 2, 9, 8, 7]
ke = my_list.index(4)
ke = my_list.index(10)
print(ke)

4.5.2 列表統計元素出現次數

通過 count 方法可以獲取列表特定元素出現的次數,它的語法格式如下:

次數 = my_list.count(待查找值)

該方法同樣當在列表中找不到待查找值時會返回 0。

my_list = [3, 4, 3, 2, 3, 8, 7]
nums = my_list.count(3)

print(nums)

4.5.3 列表轉換爲字符串

通過 join 方法可以將列表中的所有元素組合成一個字符串,語法格式如下:

連接字符串.join(待轉換列表)

該方法其實準確的說應該是 字符串對象的一個方法。

my_list = ["pear", "apple", "orange"]
my_str = "#".join(my_list)

print(my_str)

該方法在使用的時候需要注意,列表中所有元素都必須是字符串,否則會出現 expected str instance, int found 錯誤。

4.5.4 列表追加列表

append 方法可以給列表追加元素,extend 可以給一個列表追加一個列表,相當於將兩個列表進行連接。

列表1.extend(列表2)

注意追加的列表默認在原列表末尾追加,所以追加之後原列表中的元素已經發生了改變。

my_list1 = [1, 2, 3]
my_list2 = [4, 5, 6]

my_list1.extend(my_list2)
print(my_list1)

4.6 多維列表

列表中的元素可以爲任意數據類型,故列表嵌套列表也是可以的。

my_list = [1,2,3,[4,5,6]]

該方法需要注意獲取嵌套列表中的元素的時候,需要按照層級獲取,例如希望獲取元素 5,首先要獲取最外層列表中的第 4 項元素,即 my_list[3],然後獲取到它之後再獲取它索引位置爲 1 的元素,即 my_list[3][1],具體代碼可以自行嘗試,也可以在內層列表中在嵌套列表,無限循環下去。

4.7 特殊的列表字符串

現在回過頭來再看一下字符串格式爲 "abcsdasa",可以將字符串看成一個字符組成的列表,一般也稱作字符序列(有順序的列表),字符串也不能完全等價於列表,因爲字符串中不能修改單個元素。

4.7.1 字符串索引與切片

字符串也可以通過索引訪問某個元素,索引使用方式與列表一致,例如下述代碼:

my_str = "abcdefghi"
print(my_str[5])
print(my_str[4])
print(my_str[3])

列表切片也可用於字符串,相當於獲取字符串子串。

4.7.2 可用於字符串的部分函數和方法

列表相關的內置方法,例如 len、max、min 也可用於字符串,具體內容你可自行嘗試。

4.7.3 將字符串轉換成列表

通過內置函數 list 可以將字符串轉換成列表,也就是將字符串中每個字符都拆解開。

my_str = "abcdefghi"
print(list(my_str))

輸出內容爲:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

4.8 這篇博客的總結

列表在 Python 基礎部分屬於非常重要的數據類型,在寫這篇博客的時候也在考慮是否將所有內容都包含進去,結果發現內容太多了,很多都與後面產生的極強的關聯性,在本篇博客中也初步瞭解了面向對象的一些最簡單概念。

本篇博客省略的部分,後續將補充完整,具體內容先埋個坑。

  • 深複製與淺複製
  • 地址的概念
  • in、not in 表達式
  • is、is not 表達式
  • enumerate 對象

希望在講解這些內容的時候,還能看到堅持學習的你的留言。

最後一碗毒雞湯

只要我肯努力 就沒有搞不砸的事情 O(∩_∩)O 哈哈~ 👗👗

想學Python爬蟲,可以訂閱橡皮擦專欄哦~ 👗👗👗 點擊發現驚喜 👗👗👗

💎💎💎💎💎💎💎💎💎💎💎


今天是持續寫作的第 3/100 天。
如果你有想要交流的想法、技術,歡迎在評論區留言。


如果你想跟博主建立親密關係,可以關注博主,或者關注博主公衆號“非本科程序員”,瞭解一個非本科程序員是如何成長的。
博主 ID:夢想橡皮擦,希望大家點贊、評論、收藏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章