戰(zhàn)案例)
同學(xué)你好 歡迎回到 Python 課堂。我是你的老師。上節(jié)課我們學(xué)習(xí)了字符串今天我們要迎來 Python 中最強(qiáng)大、最常用的數(shù)據(jù)結(jié)構(gòu)——列表List。如果把字符串比作一串固定的珍珠項(xiàng)鏈那么列表就像一個(gè)“魔法收納箱”。你可以往里面裝任何東西數(shù)字、字符串、甚至其他列表而且可以隨時(shí)往里面加?xùn)|西、拿東西、或者改變里面的東西。為了讓你徹底掌握它我將這篇教程的精華提煉為5 個(gè)核心模塊并為你準(zhǔn)備了豐富的實(shí)戰(zhàn)案例和避坑指南。打開你的代碼編輯器我們開始吧 第一模塊列表的“誕生”創(chuàng)建與特點(diǎn)列表用方括號[]表示元素之間用逗號,分隔。 老師劃重點(diǎn)列表中的元素不需要是相同類型這是它和很多其他語言數(shù)組最大的不同。 案例# 1. 包含不同類型的“大雜燴”列表magic_box[蘋果,100,3.14,True,[1,2,3]]print(magic_box)# 2. 空列表當(dāng)你需要后續(xù)往里面添加數(shù)據(jù)時(shí)empty_list[]# 或者使用內(nèi)置函數(shù)another_emptylist() 第二模塊列表的“尋物指南”索引、切片與查列表和字符串一樣都是序列所以它們共享相同的索引和切片規(guī)則。正向索引從0開始。反向索引從-1開始-1代表最后一個(gè)元素。成員檢查使用in關(guān)鍵字。 案例fruits[蘋果,香蕉,櫻桃,葡萄,西瓜]# 1. 索引訪問print(fruits[0])# 輸出: 蘋果print(fruits[-1])# 輸出: 西瓜 (倒數(shù)第一個(gè))# 2. 切片訪問 (左閉右開)print(fruits[1:3])# 輸出: [香蕉, 櫻桃] (取索引 1 和 2)print(fruits[2:])# 輸出: [櫻桃, 葡萄, 西瓜] (從索引 2 到末尾)print(fruits[::-1])# 輸出: [西瓜, 葡萄, 櫻桃, 香蕉, 蘋果] (列表反轉(zhuǎn))# 3. 檢查元素是否存在print(香蕉infruits)# 輸出: Trueprint(橘子infruits)# 輸出: False? 第三模塊列表的“增刪改”核心操作重中之重這是列表最常用的操作老師為你分類整理請仔細(xì)對比它們的區(qū)別1. 增加元素 (Add)append(x): 在列表末尾添加一個(gè)元素。extend(iterable): 在列表末尾一次性追加多個(gè)元素把另一個(gè)序列“拆開”加進(jìn)來。insert(i, x): 在指定索引i的位置插入元素x。 案例nums[1,2,3]nums.append(4)print(nums)# 輸出: [1, 2, 3, 4]nums.extend([5,6])# 注意傳入的是一個(gè)列表print(nums)# 輸出: [1, 2, 3, 4, 5, 6]nums.insert(0,99)# 在索引 0 的位置插入 99print(nums)# 輸出: [99, 1, 2, 3, 4, 5, 6]2. 刪除元素 (Remove)remove(x): 刪除列表中第一個(gè)匹配的值x。如果找不到會報(bào)錯(cuò)pop([i]): 移除并返回指定索引i的元素。如果不寫索引默認(rèn)移除并返回最后一個(gè)元素。像彈夾彈出子彈一樣。del: Python 的語句可以按索引刪除也可以刪除整個(gè)列表變量。clear(): 清空列表保留空殼[]。 案例colors[紅,綠,藍(lán),綠,黃]# 1. remove: 按值刪除 (只刪第一個(gè)遇到的)colors.remove(綠)print(colors)# 輸出: [紅, 藍(lán), 綠, 黃]# 2. pop: 按索引刪除并拿到被刪的值last_colorcolors.pop()# 默認(rèn)彈出最后一個(gè)print(last_color)# 輸出: 黃print(colors)# 輸出: [紅, 藍(lán), 綠]first_colorcolors.pop(0)# 彈出索引 0 的元素print(first_color)# 輸出: 紅# 3. del: 按索引刪除delcolors[0]print(colors)# 輸出: [藍(lán)]3. 修改元素 (Update)直接通過索引重新賦值即可因?yàn)榱斜硎强勺兊倪@和字符串不同。scores[80,90,70]scores[1]95# 把 90 改成 95print(scores)# 輸出: [80, 95, 70] 第四模塊列表的“高級魔法”常用內(nèi)置方法與函數(shù)1. 排序與反轉(zhuǎn)sort(): 對原列表進(jìn)行就地排序默認(rèn)升序。會改變原列表reverse(): 將原列表就地反轉(zhuǎn)。 案例numbers[4,1,9,3]# 升序排序numbers.sort()print(numbers)# 輸出: [1, 3, 4, 9]# 降序排序 (使用 reverseTrue 參數(shù))numbers.sort(reverseTrue)print(numbers)# 輸出: [9, 4, 3, 1]# 反轉(zhuǎn)numbers.reverse()print(numbers)# 輸出: [1, 3, 4, 9](老師提示如果不想改變原列表想得到一個(gè)排好序的新列表可以使用sorted(numbers)函數(shù))2. 統(tǒng)計(jì)與查找count(x): 統(tǒng)計(jì)元素x在列表中出現(xiàn)的次數(shù)。index(x): 返回元素x第一次出現(xiàn)的索引。找不到會報(bào)錯(cuò) 案例letters[a,b,a,c,a]print(letters.count(a))# 輸出: 3print(letters.index(c))# 輸出: 33. 常用全局函數(shù)len(list): 獲取列表長度元素個(gè)數(shù)。max(list)/min(list): 獲取最大值/最小值元素必須是可比較的同類型如全是數(shù)字。?? 第五模塊老師的“避坑指南”考試/實(shí)戰(zhàn)必考 坑點(diǎn) 1append和extend的混淆這是新手最容易犯的錯(cuò)誤。list_a[1,2]list_b[3,4]list_a.append(list_b)print(list_a)# 輸出: [1, 2, [3, 4]] -- 把整個(gè)列表當(dāng)成了一個(gè)元素塞進(jìn)去list_c[1,2]list_c.extend(list_b)print(list_c)# 輸出: [1, 2, 3, 4] -- 把元素拆開合并進(jìn)來(這才是你想要的) 坑點(diǎn) 2列表的“影子克隆”淺拷貝陷阱在 Python 中賦值不會創(chuàng)建新列表它只是給原來的列表貼了一個(gè)“新標(biāo)簽”別名。修改其中一個(gè)另一個(gè)也會變original[1,2,3]fake_copyoriginal# ? 錯(cuò)誤做法這只是起了個(gè)別名fake_copy[0]99print(original)# 輸出: [99, 2, 3] (原列表被意外修改了)# ? 正確做法 1使用 copy() 方法real_copyoriginal.copy()real_copy[1]88print(original)# 輸出: [99, 2, 3] (原列表安全了)# ? 正確做法 2使用切片 (Pythonic 寫法)another_copyoriginal[:] 坑點(diǎn) 3在遍歷列表時(shí)直接刪除元素這會導(dǎo)致索引錯(cuò)亂漏掉元素或報(bào)錯(cuò)。# ? 危險(xiǎn)操作nums[1,2,2,3]forninnums:ifn2:nums.remove(n)# 可能會導(dǎo)致跳過某些元素# ? 安全操作遍歷它的副本或者使用列表推導(dǎo)式后續(xù)課程會學(xué)forninnums[:]:# 加上 [:] 遍歷副本ifn2:nums.remove(n) 老師的課后小測驗(yàn)光看不練假把式請?jiān)谀愕?Python 環(huán)境中嘗試解決以下 3 個(gè)問題基礎(chǔ)操作創(chuàng)建一個(gè)列表animals [貓, 狗, 兔子]。請?jiān)凇肮贰焙汀巴米印敝g插入“倉鼠”然后將列表反轉(zhuǎn)最后打印出來。方法辨析有列表A [1, 2]和B [3, 4]。執(zhí)行A.append(B)后len(A)的值是多少執(zhí)行A.extend(B)后len(A)的值又是多少實(shí)戰(zhàn)場景有一個(gè)成績列表scores [85, 92, 78, 92, 60]。請編寫代碼去掉一個(gè)最低分去掉一個(gè)最高分然后計(jì)算剩余分?jǐn)?shù)的平均值。提示使用remove,max,min,sum,len同學(xué)列表是 Python 編程的基石后續(xù)的字典、元組以及數(shù)據(jù)處理如 Pandas都建立在熟練掌握列表的基礎(chǔ)上。你可以先自己嘗試寫出這 3 道題的代碼。如果有任何疑惑或者運(yùn)行代碼時(shí)遇到了報(bào)錯(cuò)比如IndexError或ValueError隨時(shí)把代碼發(fā)給我老師會幫你一行行分析 debug今天表現(xiàn)得很棒繼續(xù)加油 還有什么不清楚的嗎