python連載第十五篇~史上最全列表知識原始碼+答案
阿新 • • 發佈:2019-01-22
#2017-12-19 19:34:41 December Tuesday the 51 week, the 353 day #python連載第十五篇~list列表 #列表定義,訪問,索引,操作,切片 列表就是用中括號包圍、逗號隔開的任何東西(稱作元素element),沒有數量,長度限制: 用中括號[]加序號訪問列表元素的方法就是索引index,索引就是列表元素所在的位置,索引從0 而不是1 開始,第二個元素索引為1,第三個索引為2,依次類推 #python連載第十五篇~list列表 #訪問list中的元素 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] #這個列表中有6個元素,但是一般我們從0開始數,一直數到5。 #也就是list1[0]的元素內容就是數字1,list1[5]元素內容就是"最近如何,親?" list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] #可以用print函式直接輸出這個列表 print("該列表所有元素為:",list1) #訪問第一個元素 print("列表第一個元素為:",list1[0]) #訪問第二個元素 print("列表第二個元素為:",list1[1]) #訪問第六個元素 print("列表第六個元素為:",list1[5]) #也可以用負數來調取列表中的元素。 #list1[-1]表示列表中的最後一個元素。 print("列表最後一個元素為:",list1[-1]) #list1[-5]表示倒數第5個元素 print("列表倒數第5個元素:",list1[-5]) #也可以用for迴圈輸出列表內容 #for迴圈最擅長和列表配合搞事情 for i in list1: print(i) #for迴圈做的事情其實就是遍歷列表中的每一項,每次迴圈都把當前項賦值給一個變數(這裡是i)並輸出,直到列表結束 #python連載第十五篇~list列表 #修改,新增 #修改列表中的元素 #只需要直接給那個元素賦值就可以了: #給第一個元素賦值為512 list1[0] = 512 #賦值之後的列表內容 print("現在list1變成了",list1) #向list中新增元素 #append方法可以在列表最後面增加元素。 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] #python中append方法的使用技巧是在列表後面新增英語中的句號,然後新增append方法 list1.append('最近很好呢~') print("向list列表中新增元素後:",list1) #python連載第十五篇~list列表 各種刪除方法 #del()方法刪除list中的元素,被刪除的元素無法再被使用 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] #刪除第一個元素 del list1[0] print("刪除列表中第一個元素後:",list1) #pop()方法刪除list中的元素,被刪除的元素還可以被使用 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] poped_list = list1.pop() #刪除列表最後一個元素 print("刪除最後一個元素後的列表:",list1) print("被刪除的元素:",poped_list) #彈出(刪除)列表中的任意元素,只需在pop()中加入數字 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] poped_list = list1.pop(2) #刪除列表最後一個元素 print("刪除第三個元素後的列表:",list1) print("被刪除的第三個元素:",poped_list) #直接刪除列表中的元素 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] love = 'i love you' list1.remove(love) print("刪除指定元素後的列表:",list1) #被刪除的元素還可以繼續使用 print("被刪除的元素:",love) 切片的含義就是從列表許多元素中取出你想要的部分,類似屠夫用刀從牛肉中隨意剁出一塊出來的感覺,具體的方法就是: 在中括號[]內提供一對合適數字,用:分割。冒號前的數表示切片的開始位置,冒號後的數字表示切片到哪裡結束。 注意,開始位置包含在切片中,而結束位置不包括。 列表中第一個元素位置是0,第二個元素位置是1,以此類推 #python連載第十五篇~list列表 #列表的切片讀取 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] #取出列表中的第3個,第四個,元素,不包含第五個元素 print("列表第3,4個元素是:",list1[2:4]) #如果不指定第一個數,切片就從列表第一個元素開始 print("列表第1,2,3,4個元素是:",list1[:4]) #如果不指定第二個數,就一直到最後一個元素結束 print("列表第3個元素以後的內容是:",list1[2:]) #不指定,則返回列表所有元素 print("列表所有元素是:",list1[:]) #同索引一樣,切片中的數字也可以使用負數。比如 print("列表第3個到倒數第二個元素:",list1[2:-2]) #遍歷切片 print("前三個元素為:") for list1_1 in list1[:3]: print(list1_1) #python連載第十五篇~list列表 列表排序 #下面列表中的元素是我在德國留學時候的室友,朋友 list2 = ['johannes', 'romi', 'andre','martin'] #列表永久按照字母表順序排序,排序後不可撤銷 list2.sort() print("正序列表內容:",list2) #向sort()方法傳遞引數reverse=True可以讓列表內容按照字母反方向順序排序 list2.sort(reverse=True) print("反序列表內容:",list2) #還可以用sorted()方法對列表臨時排序 list2 = ['johannes', 'romi', 'andre','martin'] print("這是原始列表") print("原始列表:",list2) print("這是臨時排序列表") print("臨時正序列表:",sorted(list2)) print("原始列表保持不變") print("原始列表:",list2) #倒著列印列表 list2 = ['johannes', 'romi', 'andre','martin'] list2.reverse() #反轉方法 print("反轉列表:",list2) #確定列表長度 list2 = ['johannes', 'romi', 'andre','martin'] print("列表list2元素個數為:") print(len(list2)) #python連載第十五篇~list列表 列表中插入,複製 #使用方法insert()可在列表的任何位置新增新元素。 #只需要指定新元素的索引(位置)和值。在插入的位置右側元素自動右移一個位置 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] list1.insert(4, 'Schatz德語寶貝的意思') print(list1) #複製列表 list1 = ['漢語', '英語'] list2 = list1 list3 = list1[:] #[:]代表列表所有內容 print("新名字:list2,舊列表:",list2) print("新名字:list3,舊列表:",list3) #python連載第十五篇~list列表 列表加法,乘法,巢狀 #列表可以做加法 list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"] list2 = ['johannes', 'romi', 'andre','martin'] list3 = list1 + list2 print("加法列表結果:",list3) #列表還可以做乘法 list2 = ['johannes', 'romi', 'andre','martin'] list4 = list2 * 2 print("乘法列表結果:",list4) #列表巢狀,列表裡面的元素還是列表 list1 = [1, '2', ] list2 = ['johannes', 'romi'] list5 = [list1, list2] print("列表巢狀結果:",list5) 2017-12-23 15:14:10 December Saturday the 51 week, the 357 day #python連載第十五篇~list列表 數字列表的玩法 #for迴圈做的事情其實就是遍歷一個列表中的每一項, #每次迴圈都把當前項賦值給一個變數(這裡是i)並輸出,直到列表結束 #使用函式(函式和方法是一個意思,兩者等價)range()建立一列數字 for i in range(1, 5): print(i) #建立數值列表 numbers = list(range(1,5)) print("列表巢狀結果:",numbers) #指定步長求偶數,第一個2是起點,11是終點,最後一個2是數字的間隔,步長 even_numbers = list(range(2,11,2)) print("2到10之間的偶數:",even_numbers) #平方運算,在Python中,兩個星號(**)表示乘方運算。 #列表包含前10個整數的平方 squares = [] #建立空列表 for value in range(1,11): #for迴圈輸出1到10的數字 square = value**2 #給每個數字做平方運算 squares.append(square) #把每個數字依次新增到空列表裡面 print("1到10的平方分別是:",squares) #打印出最終的列表 numbers = list(range(1,5)) print("列表元素內容為",numbers) #求數字列表最小值 min_numbers = min(numbers) print("列表最小元素為:", min_numbers) #求數字列表最大值 max_numbers = max(numbers) print("列表最大元素為:",max_numbers) #求數字列表元素之和 sum_numbers = sum(numbers) print("列表數字元素之和為:",sum_numbers) 2017-12-23 15:13:58 December Saturday the 51 week, the 357 day #python連載第十五篇~list列表 常見系統錯誤整理 #索引錯誤:列表索引元素號碼要在元素裡面,如果超出電腦會報錯 list2 = ['johannes', 'romi', 'andre','martin'] print(list2[4]) 電腦報錯如下: Traceback (most recent call last): #不用看,沒啥意義 File "D:\Sublime_work_D\TF\TF_test.py", line 2, in <module> print(list2[4]) #錯誤程式碼所在位置行 IndexError: list index out of range #索引錯誤:超出列表索引範圍 [Finished in 1.0s] #語法錯誤: for i in range(1, 10) print(i) File "D:\Sublime_work_D\TF\TF_test.py", line 1 for i in range(1, 10) #指出錯誤在for迴圈的末尾,缺個分號 ^ SyntaxError: invalid syntax #語法錯誤:無效語法 [Finished in 0.8s] #縮排錯誤舉例 #沒有縮排 for i in range(1, 10): print(i) 執行後無法通過電腦檢測,電腦返回如下: File "D:\Sublime_work_D\TF\TF_test.py", line 2 #檔案在電腦中的位置 print(i) #錯誤所在位置 ^ IndentationError: expected an indented block #縮排錯誤期望一個縮排模組 [Finished in 1.8s with exit code 1] #不必要的縮排 list2 = ['johannes', 'romi', 'andre','martin'] print(list2[4]) File "D:\Sublime_work_D\TF\TF_test.py", line 3 print(list2[4]) ^ IndentationError: unexpected indent #縮排錯誤:超出預期的縮排,沒必要縮排 [Finished in 0.8s] 建議大家積累常見錯誤,然後定期複習,避免重複犯錯,對英語有壓力的同學可以記住錯誤中的常見詞,以後碰到新錯誤就能看懂電腦報錯原因。把這個錯誤放進檔案:python_problems.py 這句話是關鍵:IndexError: list index out of range,說明了錯誤原因是索引錯誤:IndexError 最後關於列表還有大量操作,這裡只是拋磚引玉,以後碰到了新用法,自己臨時學習就行,做程式設計,最重要的品質就是學習能力和終生學習的意識。 一旦放棄學習,很快就被時代拋棄 家庭作業: 用range方法和for迴圈實現1到10的平方 squares = [value**2 for value in range(1,11)] print(squares) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] [Finished in 1.7s]