資源簡介 (共99張PPT)Python少兒編程第四章 形形色色的數據容器目錄1.1通用系列1.2百變字符串1.3會魔法的列表1.4被束縛了的元組1.5有身份的字典1.6獨一無二的集合PART 01通用序列索引1.1序列中的所有元素都可以通過索引(下標)來獲取,從左往右,第一個元素的索引為0,第二個為1,依此類推到最后一位。索引還可以取負值,從右往左,最后一個元素的索引為 1,倒數第二個為 2,依此類推到左側第一位。例如,創建字符串“str1='Python'”,其索引如表4-1所示。表4-1 字符串str1的索引由表4-1可知,str1[0]和str1[ 6]的值都是字符“P”。還可使用序列字面值直接使用索引,如'Python'[0]的值也是字符“P”。分片1.2分片與索引類似,都可以獲取序列中的元素,區別是索引只能獲取單個元素,而分片可以獲取一定范圍內的元素。分片通過冒號隔開的兩個索引來實現,其語法格式如下。slice[start:end:step]其中,slice表示序列;start表示起始索引,缺省時分片從序列中的第一個元素開始;end表示結束索引(不含),缺省時分片到序列的最后一個元素結束;step表示步長,缺省時為1,不能為0。例如,創建字符串“str2='abcdefg'”,使用分片獲取字符串中元素的幾種情況如表4-2所示。分片1.2表4-2 分片獲取字符串str2中元素分片1.2Python中步長不能設置為0,但可以是負數。當步長為負數時,起始索引必須大于結束索引,即分片從右往左提取元素。例如:str3 = str2[7:0:-1] #str3為'gfedcb'str3 = str2[-1:-8:-1] #str3為'gfedcba'str3 = str2[::-1] #str3為'gfedcba'相加1.3使用加法運算符可對序列進行連接操作。例如:str4 = 'Hello,' + 'World' #字符串連接,str4為'Hello,World'list1 = [1,2,3] + [4,5,6] #列表連接,list1為[1, 2, 3, 4, 5, 6]相乘1.4使用數字n乘以一個序列會生成新的序列,在新的序列中,原來的序列將重復n次。例如:str5 = 'hello' * 3 #str5為'hellohellohello'長度、最小值和最大值1.5序列常用的內置函數有len()、min()和max(),其參數都為序列名。其中,len()函數返回序列中元素的個數(即序列長度),min()函數和max()函數則分別返回序列中最小和最大的元素。【例4-1】 輸入一個字符串,輸出字符串中的最大字符和最小字符,并將字符串輸出為如下格式(輸出的“ ”的個數會隨著字符串的長度而變化),如圖4-1所示。圖4-1 輸出的文字格式【問題分析】 本例題中,輸出連續相同的字符“ ”,可使用序列的乘法運算實現,它的個數等于輸入字符串的長度,可使用len()函數獲取。然后使用max()和min()函數獲取字符串中的最大字符和最小字符并輸出。長度、最小值和最大值1.5【參考代碼】strs = input('請輸入一個字符串:') #輸入字符串并賦給strsstr_len = len(strs) #獲取strs長度并賦給str_lenstr_max = max(strs) #獲取strs中最大字符并賦給str_maxstr_min = min(strs) #獲取strs中最小字符并賦給str_minprint('該字符串中最大字符為:', str_max) #輸出最大字符print('該字符串中最小字符為:', str_min) #輸出最小字符print('+ ' + '-' * str_len + ' +') #輸出“+ ”、str_len個“-”和“ +”print('| ' + strs + ' |') #輸出“| ”、字符串和“ |”print('+ ' + '-' * str_len + ' +') #輸出“+ ”、str_len個“-”和“ +”長度、最小值和最大值1.5【運行結果】 程序運行結果如圖4-2所示。圖4-2 例4-1程序運行結果查找和計數1.6序列提供index()方法用于返回指定元素在序列中首次出現的位置,如果該元素不在序列中則拋出異常,其語法格式如下。sequence.index(obj)如果需要知道指定元素在序列中出現的次數,可以使用count()方法進行計數并返回,其語法格式如下。其中,sequence表示序列,obj表示要查找的對象。sequence.count(obj)【例4-2】 查找輸入的人物是否在《三國演義》片段中,如果在,則統計出現的次數。【問題分析】 首先使用“in”運算符判斷輸入的人物是否在《三國演義》片段中,如果在,則使用index()方法獲取首次出現的位置,然后使用count()方法統計出現的次數。查找和計數1.6【參考代碼】#創建字符串excerpts并賦值excerpts = '''次日,于桃園中,備下烏牛白馬祭禮等項,三人焚香再拜而說誓曰:“念劉備、關羽、張飛,雖然異姓,既結為兄弟,則同心協力,救困扶危;上報國家,下安黎庶。不求同年同月同日生,只愿同年同月同日死。皇天后土,實鑒此心,背義忘恩,天人共戮!”誓畢,拜玄德為兄,關羽次之,張飛為弟。祭罷天地,復宰牛設酒,聚鄉中勇士,得三百余人,就桃園中痛飲一醉。來日收拾軍器,但恨無馬匹可乘。正思慮間,人報有兩個客人,引一伙伴當,趕一群馬,投莊上來。玄德曰:“此天佑我也!”三人出莊迎接。原來二客乃中山大商:一名張世平,一名蘇雙,每年往北販馬,近因寇發而回。玄德請二人到莊,置酒管待,訴說欲討賊安民之意。二客大喜,愿將良馬五十匹相送;又贈金銀五百兩,鑌鐵一千斤,以資器用。'''查找和計數1.6【參考代碼】(續)name = input('請輸入人物姓名:') #輸入人物姓名并賦給nameif name in excerpts: #如果name在此片段中#使用index()方法獲取name首次出現的位置indexindex = excerpts.index(name)print(name, '首次出現的位置索引為:', index) #輸出index#使用count()方法獲取name出現的次數并輸出print(name, '在此片段中出現', excerpts.count(name), '次')else:print(name, '沒有出現在此片段中') #輸出name不在此片段中查找和計數1.6【運行結果】 程序運行結果如圖4-3所示。圖4-3 例4-2程序運行結果PART 02百變字符串字符串格式化2.1Python提供了“%”符號進行字符串格式化,其語法格式如下。1. “%”符號其中,[]中的項為可選項,也可以表示為如下形式。'%[標志][0][輸出最小寬度][.精度]格式字符' %變量'%[±][0][m][.n]格式字符' %變量(1)標志:標志字符為“+”或“ ”,指定輸出數據的對齊方式。(2)輸出最小寬度:用十進制整數m表示輸出的最小位數。(3)精度:精度格式符以“.”開頭,后跟十進制整數n。(4)格式字符:用來表示輸出數據的類型,各種格式字符及其功能說明如表4-3所示。字符串格式化2.11. “%”符號表4-3 格式字符字符串格式化2.11. “%”符號【例4-3】 使用“%”符號格式化。【參考代碼】a = 15 #定義變量a并賦值b = 12345678.1234567 #定義變量b并賦值s = 'I love Python!' #定義字符串s并賦值print('a = %05d' % a) #使用m控制輸出位數,空位補0print('b = %8.3f' % b) #使用m.n控制輸出的長度和小數點位數print('%17s' % s) #使用m控制輸出字符串長度print('%-17.6s' % s) #使用-m.n左對齊、控制字符串長度和字符位數字符串格式化2.11. “%”符號【運行結果】程序運行結果如圖4-4所示。圖4-4 例4-3程序運行結果【程序說明】 輸出變量a時,“%05d”表示輸出寬度為5并用“0”來補空位。輸出變量b時,“%8.3f”表示輸出寬度為8,精度為3,由于實際長度超過8位,故應按實際位數輸出,小數位數超過3位部分被截去。輸出字符串s時,“%17s”表示輸出字符串寬度為17,如果字符串本身長度不足17,則用空格左補齊,可以看到“I love Python!”前存在3個空格。“% 17.6s”表示輸出寬度雖為17,但這里指定了精度“.6”,也就是說指定了輸出字符的個數為6,并且用“ ”指定了左對齊,所以輸出6個字符“I love”,后面還有11個空格。字符串格式化2.1使用format()方法也可以格式化字符串,其基本語法格式如下。2. format()方法模板字符串是由一系列槽(用大括號表示)組成,用于控制字符串中嵌入值出現的位置,其基本思想是,將format()方法中逗號分隔的參數按照序號替換到模板字符串的槽中(序號從0開始)。例如:模板字符串.format(逗號分隔的參數)#s為'你好,張三,你這個月的工資是8500元!'s = '你好,{1},你這個月的工資是{0}元!'.format(8500, '張三')如果大括號中沒有序號,則按照出現順序替換,例如:#s為'你好,8500,你這個月的工資是張三元!'s = '你好,{},你這個月的工資是{}元!'.format(8500, '張三')字符串格式化2.1format()方法中模板字符串的槽除了包括參數序號外,還可以包括格式控制信息,此時槽的內部格式如下。2. format()方法{參數序號:格式控制標記}其中格式控制標記用于控制參數顯示時的格式,它包括“填充”“對齊”“寬度”“,”“.精度”“格式字符”6個可選字段,這些字段可以組合使用。具體的格式控制標記及其說明如表4-4所示。字符串格式化2.12. format()方法表4-4 格式控制標記字符串格式化2.12. format()方法【例4-4】 模擬輸出簡單的非刷新文本進度條。要求按照任務執行百分比將整個任務劃分為100個單位,每執行10%輸出一次進度條,每行輸出包含進度百分比、代表已完成部分(**)和未完成部分(..)的兩種字符,以及一個跟隨完成進度前進的小箭頭,風格如下:%10 [**->..................]【問題分析】 本例題的關鍵是輸出字符的格式,可使用format()方法進行格式化。采用for循環和print()函數構成程序的主體部分,使用格式字符“%”輸出百分比,為了使輸出整齊,可使用{:^4.0%}格式化百分比部分。由于程序執行速度太快,不便于觀察,可使用time.sleep(t)函數將當前程序暫停t秒,其中,time是Python標準時間庫。字符串格式化2.12. format()方法【參考代碼】import time #導入time模塊scale = 10 #變量scale表示輸出進度條的精度print('-----------執行開始-----------') #輸出執行開始提示for i in range(scale + 1): #循環變量從0到scaledone = '**' * i #用“*”表示已完成的部分undone = '..' * (scale - i) #用“.”表示未完成的部分percent = i / scale #計算完成百分比#格式化輸出print('{:>4.0%}[{}->{}]'.format(percent, done, undone))time.sleep(0.1) #暫停0.1秒print('-----------執行結束-----------') #輸出執行結束提示字符串格式化2.12. format()方法【運行結果】 程序運行結果如圖4-5所示。圖4-5 例4-4程序運行結果字符串的常用操作2.2除了使用index()方法在字符串中查找指定元素,還可使用find()方法在一個較長的字符串中查找子串。如果找到子串,返回子串所在位置的最左端索引,否則返回 1,其語法格式如下。str.find(sub[,start[,end]])1. 查找字符串其中,str表示被查找字符串;sub表示查找的子串;start表示開始索引,缺省時為0;end表示結束索引,缺省時為字符串的長度。【例4-5】 使用find()方法實現例4-2,查找輸入的人物是否在《三國演義》片段中。字符串的常用操作2.21. 查找字符串【參考代碼】#創建字符串excerpts并賦值excerpts = '''次日,于桃園中,備下烏牛白馬祭禮等項,三人焚香再拜而說誓曰:“念劉備、關羽、張飛,雖然異姓,既結為兄弟,則同心協力,救困扶危;上報國家,下安黎庶。不求同年同月同日生,只愿同年同月同日死。皇天后土,實鑒此心,背義忘恩,天人共戮!”誓畢,拜玄德為兄,關羽次之,張飛為弟。祭罷天地,復宰牛設酒,聚鄉中勇士,得三百余人,就桃園中痛飲一醉。來日收拾軍器,但恨無馬匹可乘。正思慮間,人報有兩個客人,引一伙伴當,趕一群馬,投莊上來。玄德曰:“此天佑我也!”三人出莊迎接。原來二客乃中山大商:一名張世平,一名蘇雙,每年往北販馬,近因寇發而回。玄德請二人到莊,置酒管待,訴說欲討賊安民之意。二客大喜,愿將良馬五十匹相送;又贈金銀五百兩,鑌鐵一千斤,以資器用。'''字符串的常用操作2.21. 查找字符串【參考代碼】(續)name = input('請輸入人物姓名:') #輸入人物姓名并賦給nameindex = excerpts.find(name)#使用find()方法在excerpts中查找nameif index > -1: #如果返回值大于-1#輸出indexprint('{}首次出現的位置索引為:{}'.format(name, index))#使用count()方法獲取name出現的次數并輸出print('{}在此片段中出現{}次'.format(name, excerpts.count(name)))else:print('{}沒有出現在此片段中'.format(name)) #輸出不在此片段中字符串的常用操作2.21. 查找字符串【運行結果】 程序運行結果如圖4-6所示。圖4-6 例4-5程序運行結果字符串的常用操作2.2split()方法以指定字符為分隔符,從字符串左端開始將字符串分隔成多個子串,并返回分割結果的列表,其語法格式如下。str.split([delimiter, num])2. 分割字符串其中,str表示被分割的字符串;delimiter表示分隔符,可以是空格、換行(\n)、制表符(\t)等,缺省時為空格;num表示分割次數,缺省時全部分割。例如,使用split()方法將字符串“This is an example of cutting”進行分割,可以用下面代碼實現。strs = 'This is an example of cutting' #創建字符串'''以空格為分隔符將字符串全部分割結果為['This', 'is', 'an', 'example', 'of', 'cutting']'''strs.split()'''以空格為分隔符將字符串分割3次結果為['This', 'is', 'an', 'example of cutting']'''strs.split(' ', 3)字符串的常用操作2.2join()方法用于將序列中的元素以指定的字符連接,生成一個新的字符串,其語法格式如下。str.join(sequence)3.連接字符串其中,str表示連接符,可以為空;sequence表示要連接的序列。例如,使用join()方法將字符串“Python!”中的字符用“ ”連接,可以用下面代碼實現。#用“ ”連接字符,輸出結果為“P-y-t-h-o-n-!”print('-'.join('Python!'))字符串的常用操作2.23.連接字符串【例4-6】 將字符串“Rain falls on field and tree.”中的多余空格刪除,即如果有連續空格只保留一個。【問題分析】 可使用split()方法以空格為分隔符將字符串分隔成多個子串,然后使用join()方法通過空格將多個子串進行連接。【參考代碼】strs = 'Rain falls on field and tree.‘ #創建字符串strsprint(strs) #輸出strssplit_strs = strs.split() #以空格為分隔符,將strs全部分割print(split_strs) #輸出分割后結果join_strs =' '.join(split_strs) #用空格連接分割后的子串print(join_strs) #輸出連接后的字符串字符串的常用操作2.23.連接字符串【運行結果】 程序運行結果如圖4-7所示。圖4-7 例4-6程序運行結果字符串的常用操作2.2replace()方法用于將字符串中的舊字符串替換成新字符串,其語法格式如下。str.replace(old,new[,max])4.替換字符串其中,str表示字符串;old表示將被替換的舊字符串;new表示新字符串,用于替換old;max是可選參數,表示替換的最大次數,缺省時替換所有。例如,使用replace()方法將字符串“Monday Tuesday Wednesday”中的“day”替換為“DAY”,可以用下面代碼實現。strs = 'Monday Tuesday Wednesday'#將strs中的day替換為DAY,輸出結果為“MonDAY TuesDAY WednesDAY”print(strs.replace('day', 'DAY'))#將strs中的day替換為DAY,只替換兩次,輸出結果為“MonDAY TuesDAY Wednesday”print(strs.replace('day', 'DAY', 2))字符串的常用操作2.2strip()方法用于移除字符串首尾連續的空白字符或指定字符,其語法格式如下。str.strip([chars])5.移除字符串的首尾字符其中,str表示字符串;chars表示移除的字符串首尾指定的字符,缺省時為空格。例如,使用strip()方法移除字符串“110This is an example0001”中的“0”和“1”,可以用下面代碼實現。strs = '110This is an example0001' #創建字符串#移除strs兩側的1,輸出結果為“0This is an example000”print(strs.strip('1'))#移除strs兩側的1和0,輸出結果為“This is an example”print(strs.strip('10'))字符串的常用操作2.2lower()方法用于將字符串中所有大寫字符轉換為小寫,而upper()方法則用于將字符串中所有小寫字符轉換為大寫,其語法格式如下。str.lower()str.upper()6.轉換字符串的大小寫其中,str表示字符串。例如,使用lower()方法將字符串“This is an EXAMPLE”轉換為小寫,再使用upper()方法將其轉換為大寫,可以使用下面代碼實現。strs = 'This is an EXAMPLE' #創建字符串#將strs中的大寫字符轉換為小寫,輸出結果為“this is an example”print(strs.lower())#將strs中的小寫字符轉換為大寫,輸出結果為“THIS IS AN EXAMPLE”print(strs.upper())字符串的常用操作2.2isalnum()方法用于檢測字符串是否由字母和數字,或兩種中的一種組成,如果是則返回True,否則返回False,其語法格式如下。str.isalnum()7.檢測字符串其中,str表示要檢測的字符串。例如,使用isalnum()方法判斷字符串“2021example”是否由字母和數字組成,可以用下面代碼實現。strs = '2021example' #創建字符串print(strs.isalnum()) #判斷strs中是否只有字母和數字,輸出結果為TruePART 03會魔法的列表列表的創建和訪問3.1創建列表只需將逗號分隔的不同元素使用方括號括起來即可。例如:animal = ['elephant', 'monkey', 'snake', 'tiger'] #創建列表animalnumber = [1, 2, 3, 4, 5] #創建列表number與字符串一樣,可以通過下標索引的方式來訪問列表中的元素。列表的正索引也是從0開始的,同樣也可以是負索引。例如,使用animal[0]訪問上述列表animal中索引為0的元素,取值為“elephant”。列表的創建和訪問3.1【例4-7】 創建書包列表,記錄書包里的物品。【參考代碼】#創建列表schoolbag并賦值schoolbag = ['語文書', '數學書', '練習冊', '筆盒']schoolbag1 = schoolbag #將schoolbag賦給schoolbag1print(schoolbag, schoolbag1) #輸出schoolbag和schoolbag1schoolbag[0] = '英語書' #將第一個元素的值修改為“英語書”print(schoolbag, schoolbag1) #輸出schoolbag和schoolbag1 列表的創建和訪問3.1【運行結果】 程序運行結果如圖4-8所示。圖4-8 例4-7程序運行結果【程序說明】 schoolbag由實際數據賦值產生,為列表對象。將schoolbag賦值給列表schoolbag1只會對schoolbag列表生成一個新引用,此時,schoolbag和schoolbag1指向同一對象,即內存中真實數據只有一份。因此,修改了schoolbag后,schoolbag1也隨之改變。列表的遍歷3.2使用while循環遍歷列表,首先須獲取列表的長度,將其作為while循環的判斷條件。1.使用while循環遍歷列表【例4-8】 使用while循環輸出書包中的每項物品。【參考代碼】#創建書包列表schoolbag并賦值schoolbag = ['語文書', '數學書', '英語書', '漫畫書']length = len(schoolbag) #獲取列表的長度賦給lengthi = 0 #循環變量i初值為0while i < length: #當i小于length時循環print(schoolbag[i]) #輸出列表元素i += 1 #循環變量加1【問題分析】 使用len()函數獲取列表的長度,作為while循環的次數。列表的遍歷3.21.使用while循環遍歷列表【運行結果】 程序運行結果如圖4-9所示。圖4-9 例4-8程序運行結果列表的遍歷3.2使用for循環遍歷列表,只需將要遍歷的列表作為for循環表達式中的序列即可。2.使用for循環遍歷列表【例4-9】 使用for循環輸出書包中的每項物品。【參考代碼】#創建書包列表schoolbag并賦值schoolbag = ['語文書', '數學書', '英語書', '漫畫書']for item in schoolbag: #將列表作為for循環表達式中的序列print(item) #輸出item【運行結果】 程序運行結果如圖4-10所示。圖4-10 例4-9程序運行結果列表的基本操作3.3列表可使用append()、extend()或insert()方法來添加元素。(1)append()方法:在列表末尾添加新的元素,其語法格式如下。list.append(obj)1.添加元素其中,list表示列表,obj表示添加到列表末尾的對象。例如:number = [0, 1, 2, 3] #創建列表number并賦值number.append(4) #使用append()方法給number末尾添加元素4print(number) #輸出number,結果為[0, 1, 2, 3, 4](2)extend()方法:在列表末尾一次性添加另一個序列中的多個值(用新列表擴展原來的列表),其語法格式如下。list.extend(seq)其中,list表示列表,seq表示添加到列表末尾的序列。列表的基本操作3.31.添加元素【例4-10】 在書包中再放入練習冊和筆盒。【問題分析】 創建書包列表schoolbag、練習冊列表workbook和筆盒列表penbox,其中,workbook包含語文練習冊和數學練習冊,penbox包含鉛筆、油筆和橡皮。使用extend()方法將workbook列表添加到schoolbag中,使用append()方法將penbox添加到schoolbag中。列表的基本操作3.31.添加元素【參考代碼】#創建書包列表schoolbag并賦值schoolbag = ['語文書', '數學書', '英語書', '漫畫書']print(schoolbag) #輸出schoolbag#創建練習冊列表workbook并賦值workbook = ['語文練習冊', '數學練習冊']penbox = [‘鉛筆’, ‘油筆’, ‘橡皮’] #創建筆盒列表penbox并賦值#使用extend()方法將workbook添加到schoolbag中schoolbag.extend(workbook)print(schoolbag) #輸出schoolbag#使用append()方法將penbox添加到schoolbag中schoolbag.append(penbox)print(schoolbag) #輸出schoolbag列表的基本操作3.31.添加元素【運行結果】 程序運行結果如圖4-11所示。圖4-11 例4-10程序運行結果【程序說明】 使用extend()方法時,是將workbook看作一個序列,將這個序列和schoolbag序列合并,因此,添加元素后,schoolbag中包含了6個元素。使用append()方法時,是將penbox看作一個對象,整體打包添加到schoolbag列表中,因此,添加元素后schoolbag中包含了7個元素,其中第7個元素是一個列表。列表的基本操作3.32.刪除元素number = [1, 2, 3, 4, 5] #創建列表number并賦值del number[2] #使用del命令刪除number中索引為2的元素print(number) #輸出number,結果為[1, 2, 4, 5](1)del命令:根據索引刪除列表中的元素。例如:number = [1, 2, 3, 4, 5] #創建列表number并賦值del number[1:3] #使用del命令刪除索引從1到3(不含)的元素print(number) #輸出number,結果為[1, 4, 5]del命令還可以使用分片的方式刪除列表中的元素。例如:列表的基本操作3.32.刪除元素list.pop([index])(2)pop()方法:根據索引刪除列表中的元素,并返回該元素的值,其語法格式如下。number = [1, 2, 3, 4, 5] #創建列表number并賦值number.pop() #使用pop()方法刪除number中的元素,返回值為5print(number) #輸出number,結果為[1, 2, 3, 4]number.pop(0) #使用pop()方法刪除number中索引為0的元素,返回值為1print(number) #輸出number,結果為[2, 3, 4]其中,list表示列表,index表示刪除列表元素的索引值,為可選參數,缺省時為 1,刪除列表中的最后一個元素。例如:列表的基本操作3.32.刪除元素list.remove(obj)(3)remove()方法:刪除列表中某個值的第一個匹配項,其語法格式如下。其中,list表示列表,obj表示列表中要刪除的對象。【例4-11】 從書包中拿走英語書和漫畫書。【問題分析】 使用pop()方法刪除“英語書”,使用remove()方法刪除“漫畫書”。列表的基本操作3.32.刪除元素【參考代碼】#創建書包列表schoolbag并賦值schoolbag = ['語文書', '數學書', '英語書', '漫畫書']print(schoolbag) #輸出schoolbagschoolbag.pop(2) #使用pop()方法刪除索引為2的元素“英語書”print(schoolbag) #輸出schoolbagschoolbag.remove('漫畫書') #使用remove()方法刪除元素“漫畫書”print(schoolbag) #輸出schoolbag【運行結果】 程序運行結果如圖4-12所示。圖4-12 例4-11程序運行結果列表的基本操作3.33.分片賦值number = [1, 2, 3, 4] #創建列表number并賦值print(number) #輸出number,結果為[1, 2, 3, 4]number[2:] = [5, 6, 7] #替換索引從2開始到最后的元素print(number) #輸出number,結果為[1, 2, 5, 6, 7]分片賦值就是以分片的形式給列表賦值,可以一次為多個元素賦值。例如:number = [1,7] #創建列表number并賦值#在number中索引為1的位置插入列表[2,3,4,5,6]中的元素number[1:1] = [2,3,4,5,6]print(number) #輸出number,結果為[1, 2, 3, 4, 5, 6, 7]分片賦值還可以在不替換任何原有元素的情況下插入新的元素。列表的基本操作3.33.分片賦值number = [1, 2, 3, 4, 5, 6, 7] #創建列表并賦值number[1:6] = [] #用空列表替換number中索引1到索引6(不含)的元素print(number) #輸出number,結果為[1, 7]分片賦值也可以刪除元素。列表的基本操作3.34.列表排序(1)reverse()方法:將列表中的元素反向存放,其語法格式如下。list.reverse()其中,list表示列表,該方法沒有參數,沒有返回值。例如:number = [1,2,3,4] #創建列表number并賦值number.reverse() #使用reverse()方法將number中的元素反向存放print(number) #輸出number,結果為[4, 3, 2, 1](2)sort()方法:將列表中的元素進行排序(默認為升序排序),其語法格式如下。list.sort([key=None][,reverse=False])其中,list表示列表;key為可選參數,如果指定了該參數,會使用該參數的方法進行排序;reverse為可選參數,表示是否降序排序,缺省時為False。列表的基本操作3.34.列表排序【例4-12】 將數字從大到小排序,將英文單詞從短到長排序。【問題分析】 降序排序須指定參數reverse為True,要以序列內元素的長度來排序,須使用參數key指定排序依據為len()函數。【參考代碼】#創建數字列表number并賦值number = [5, 6, 9, 3, 12, 15, 18, 20, 35, 62]number.sort(reverse=True) #使用sort()方法對number降序排序print(number) #輸出number#創建英文單詞列表words并賦值words = ['chicken', 'fox', 'duck', 'dog', 'rabbit', 'sheep']words.sort(key=len) #使用sort()方法對words按長度升序排序print(words) #輸出words列表的基本操作3.34.列表排序【運行結果】 程序運行結果如圖4-13所示。圖4-13 例4-12程序運行結果列表的基本操作3.34.列表排序(3)sorted()函數:與sort()方法不同,內置函數sorted()返回新列表,并不對原列表進行任何修改,其語法格式如下。sorted(iterable[,key=None][,reverse=False])其中,iterable表示可迭代對象,如列表;參數key和reverse的用法與sort()方法中的相同。例如:number = [1, 5, 2, 3, 4] #創建列表number并賦值#將number中的元素升序排序后賦給變量number_newnumber_new = sorted(number)print(number) #輸出number,結果為[1, 5, 2, 3, 4]print(number_new) #輸出number_new,結果為[1, 2, 3, 4, 5]PART 04被束縛了的元組元組的創建和訪問4.1創建元組常用的方法是將逗號分隔的不同元素用圓括號括起來,也可省略圓括號,直接使用逗號分隔元素。例如:x = ('a', 'b', 1, 2, 3) #創建元組xprint(x) #輸出x,結果為('a', 'b', 1, 2, 3)y = 'a', 'b', 'c', 'd' #創建元組y時省略了圓括號print(y) #輸出y,結果為('a', 'b', 'c', 'd')如果要定義一個空元組,可以使用沒有元素的圓括號來表示。例如:x = () #創建空元組xprint(x) #輸出x,結果為()1.創建元組元組的創建和訪問4.1與列表類似,可以使用下標索引來訪問元組中的元素。例如:x = ('a', 1, 3.14) #創建元組xprint(x[0]) #輸出索引為0的元素,結果為“a”print(x[1]) #輸出索引為1的元素,結果為1print(x[-1]) #輸出索引為-1的元素,結果為3.142.訪問元組元組的合并和遍歷4.2元組中的元素值是不允許修改的,但可以對元組進行連接組合。例如:x = (1, 2, 3) #創建元組xy = ('a', 'b') #創建元組yz = x + y #將x和y進行連接組合后賦給zprint(z) #輸出z,結果為(1, 2, 3, 'a', 'b')1.合并元組元組的合并和遍歷4.22.遍歷元組【例4-13】 使用元組保存月份信息并輸出。【參考代碼】#創建元組monthsmonths = ('January', 'February', 'March', 'April', 'May','June', 'July', 'August', 'September', 'October','November', 'December')print('months索引為1的元素', months[1]) #輸出months索引為1的元素print('months索引為7的元素', months[7]) #輸出months索引為7的元素for month in months: #循環print(month, end=' ') #輸出元素元組的合并和遍歷4.22.遍歷元組【例4-13】 使用元組保存月份信息并輸出。圖4-14 例4-13程序運行結果PART 05有身份的字典字典的創建5.1直接賦值創建字典的語法格式如下。變量名 = {鍵1: 值1, 鍵2: 值2, 鍵3: 值3,……}字典的元素放在大括號中,元素之間用逗號分隔,“鍵”與“值”之間用冒號分隔。例如,創建一個學生信息字典,包括學生學號、姓名和年齡3個元素,可以用下面代碼實現。#創建字典stu_infostu_info = {'num': '20210101', 'name': '小藍', 'age': 10}1.直接賦值創建字典字典是Python中常用的一種數據存儲結構,它由“鍵-值”對組成,表示一種映射關系,每個“鍵-值”對稱為一個元素。其中,“鍵”可以是Python中任意不可變數據類型,如數字、字符串、元組等,但不能是列表、集合、字典等可變數據類型;“值”可以是任意數據類型。字典的創建5.1使用內置函數dict()可通過其他字典、“(鍵,值)”對的序列或關鍵字參數來創建字典。例如,通過下面5種方式使用dict()函數可創建相同的字典。#直接賦值創建字典stu_info1 = {'num': '20210101', 'name': '小藍', 'age': 10}#通過其他字典創建stu_info2 = dict(stu_info1)#通過“(鍵,值)”對的列表創建stu_info3 = dict([('num','20210101'),('name','小藍'),('age',10)])#通過關鍵字參數創建stu_info4 = dict(num = '20210101', name = '小藍', age = 10)#通過dict和zip結合創建stu_info5 =dict(zip(['num','name','age'],['20210101','小藍',10]))2.使用內置函數dict()創建字典字典的創建5.13.使用fromkeys()方法創建字典在Python中,當所有鍵對應同一個值時,可使用fromkeys()方法創建字典,其語法格式如下。dict.fromkeys(seq[,value])其中,seq為字典的“鍵”的列表;value為鍵對應的同一值,缺省時默認為None。例如:#創建字典,“值”默認為Nonestu_age1 = dict.fromkeys(['小藍', '小舞'])#輸出stu_age1,結果為{'小藍': None, '小舞': None}print(stu_age1)#創建字典,“值”賦為10stu_age2 = dict.fromkeys(['小藍', '小舞'], 10)#輸出stu_age2,結果為{'小藍': 10, '小舞': 10}print(stu_age2)字典的訪問5.21.根據鍵訪問值字典中的“鍵”可作為下標訪問對應的“值”,如果字典中不存在這個“鍵”則會拋出異常,其語法格式如下。dict[key]其中,dict表示字典名,key表示要查找的鍵。例如:#創建字典stu_info = {'num': '20210101', 'name': '小藍', 'age': 10}stu_info['num'] #根據num獲取學號,結果為“20210101”stu_info['name'] #根據name獲取姓名,結果為“小藍”字典的訪問5.22.使用get()方法訪問值在訪問字典時,若不確定字典中是否有某個鍵,可通過get()方法獲取,若該鍵存在,則返回其對應的值,若不存在,則返回默認值,其語法格式如下。dict.get(key[,default = None])其中,dict表示字典名;key表示要查找的鍵;default表示默認值,如果指定鍵的值不存在,返回該默認值,當default缺省時,返回None。例如,使用get()方法訪問前面定義的stu_info字典,可以用下面代碼實現。stu_info.get('name') #使用get()方法獲取學生姓名,結果為“小藍”stu_info.get('sex') #使用get()方法獲取學生性別,返回值為Nonestu_info.get('sex', '女') #設置返回默認值為“女”,返回值為“女”字典的訪問5.22.使用get()方法訪問值【例4-14】 創建中英文字典,根據輸入的中文詞組輸出對應的英文單詞。【參考代碼】chinese = ['卷心菜', '午餐', '機器人', '天空', '花'] #創建中文詞組列表chineseenglish = ['cabbage', 'lunch', 'robot', 'sky', 'flower'] #創建英文單詞列表englishdictionary = dict(zip(chinese, english)) #使用dict()和zip()方法生成字典word = input('請輸入中文詞組:') #輸入中文詞組,并賦給wordprint(dictionary.get(word)) #使用get()方法獲取word的值并輸出【問題分析】 創建兩個列表分別保存中文詞組(鍵)和英文單詞(值),要求兩個列表一一對應;然后通過dict()和zip()函數創建字典;最后根據輸入的中文詞組,使用get()方法獲取對應的值并輸出。字典的訪問5.22.使用get()方法訪問值【運行結果】 程序運行結果如圖4-15所示。圖4-15 例4-14程序運行結果字典的基本操作5.31.修改和添加元素當以指定“鍵”為下標給字典元素賦值時,有下面兩種含義。(1)若該“鍵”在字典中存在,則表示修改該“鍵”對應的值。(2)若該“鍵”不存在,則表示添加一個新的“鍵-值”對,即添加一個新元素到字典中。例如:#創建字典stu_info = {'num': '20210101', 'name': '小藍', 'age': 10}stu_info['age'] = 11 #修改age的值print(stu_info['age']) #輸出修改后的age值,結果為11stu_info['sex'] = '女' #添加學生性別#輸出添加后的字典,結果為{'num': '20210101', 'name': '小藍', 'age': 11, 'sex': '女'}print(stu_info)字典的基本操作5.32.刪除元素(1)del命令:根據“鍵”刪除字典中的元素,例如:#創建字典stu_info={'num': '20210101', 'name': '小藍','age': 10}del stu_info['age'] #刪除age“鍵-值”對#輸出刪除后的字典,結果為{'num': '20210101', 'name': '小藍'}print(stu_info)字典的基本操作5.32.刪除元素(2)clear()方法:刪除字典中的所有元素,其語法格式如下。dict.clear()其中,dict表示字典名。該方法不包含任何參數,也沒有返回值。例如:#創建字典stu_info = {'num': '20210101', 'name': '小藍', 'age': 10}stu_info.clear() #清空字典print(stu_info) #輸出清空后的字典,結果為{}字典的基本操作5.32.刪除元素(3)pop()方法:刪除指定的“鍵-值”對,并返回該“鍵”的值,其語法格式如下。dict.pop(key[,default])其中,dict表示字典名;key表示刪除的鍵;default是默認值,當字典中沒有要刪除的key時,該方法返回指定的默認值。例如:#創建字典stu_info = {'num': '20210101', 'name': '小藍', 'age': 10}stu_info.pop('age') #刪除age“鍵-值”對,并返回age的值10stu_info.pop('age', 11) #無指定鍵,返回默認值11字典的基本操作5.32.刪除元素(4)popitem()方法:隨機刪除并返回一個“鍵-值”對,其語法格式如下。dict.popitem()其中,dict表示字典名。該方法無參數,返回值為一個隨機的“鍵-值”對。例如:#創建字典stu_info = {'num': '20210101', 'name': '小藍', 'age': 10}stu_info.popitem() #隨機刪除并返回某“鍵-值”對,如('age', 10)#輸出字典,結果為{'num': '20210101', 'name': '小藍'}print(stu_info)字典的基本操作5.33.更新字典update()方法用于將新字典的“鍵-值”對一次性全部添加到當前字典中,如果兩個字典中存在相同的“鍵”,則以新字典中的“值”更新當前字典,其語法格式如下。dict.update(dict1)其中,dict表示當前字典,dict1表示新字典。例如:#創建字典stu_infostu_info = {'num': '20210101', 'name': '小藍', 'age': 10}#修改age的值,同時添加新元素stu_info.update({'age': 11, 'sex': '女'})#輸出字典,結果為{'num': '20210101', 'name': '小藍', 'age': 11, 'sex': '女'}print(stu_info)字典的基本操作5.33.更新字典【例4-15】 更新中英文字典。【參考代碼】dictionary = {'卷心菜': 'cabbage','午餐': 'lunch','機器人': 'robot','天空': 'sky','花': 'flower'} #創建字典dictionary并賦值print(dictionary) #輸出dictionarydictionary.pop('卷心菜') #刪除“卷心菜”鍵-值對print(dictionary) #輸出dictionary字典的基本操作5.33.更新字典【參考代碼】(續)#添加新字典dictionary.update({'公園': 'park', '橋': 'bridge'})print(dictionary) #輸出dictionarydictionary['午餐'] = ['lunch', 'nooning'] #修改“午餐”的值print(dictionary) #輸出dictionary【運行結果】 程序運行結果如圖4-16所示。圖4-16 例4-15程序運行結果字典的基本操作5.34.復制字典復制字典可使用copy()方法,返回字典的淺復制,其語法格式如下。dict.copy()其中,dict表示需要復制的字典,該方法無參數,返回一個新字典。例如:#創建字典stu_infostu_info = {'num': '20210101', 'name': '小藍', 'age': 10}stu_info1 = stu_info.copy() #復制stu_info,并賦給stu_info1#輸出stu_info1,結果為{'num':'20210101','name':'小藍', 'age': 10}print(stu_info1)字典的基本操作5.34.復制字典【例4-16】 使用直接賦值、淺復制和深復制3種方法復制中英文字典。【參考代碼】import copy #導入copy模塊#創建字典dictionary并賦值dictionary = {'卷心菜': 'cabbage', '午餐': ['lunch', 'nooning']}dictionary1 = dictionary #直接復制dictionary2 = dictionary.copy() #淺復制dictionary3 = copy.deepcopy(dictionary) #深復制#將dictionary中鍵為“卷心菜”的值改為“pamphrey”dictionary['卷心菜'] = 'pamphrey'字典的基本操作5.34.復制字典【參考代碼】(續)#移除dictionary中鍵為“午餐”的值列表中的“nooning”dictionary['午餐'].remove('nooning')print('dictionary = ', dictionary) #輸出dictionaryprint('dictionary1 = ', dictionary1) #輸出dictionary1print('dictionary2 = ', dictionary2) #輸出dictionary2print('dictionary3 = ', dictionary3) #輸出dictionary3【運行結果】 程序運行結果如圖4-17所示。圖4-17 例4-16程序運行結果字典的基本操作5.34.復制字典【程序說明】 “dictionary1 = dictionary”是復制引用,dictionary和dictionary1都指向同一個對象,如圖4-18所示。因此,修改dictionary中的任何一個值,dictionary1中也會隨之改變。圖4-18 賦值引用示意圖字典的基本操作5.34.復制字典【程序說明】(續) “dictionary2 = dictionary.copy()”是淺復制,dictionary和dictionary2分別是獨立的對象,但它們的子對象還是指向同一對象,如圖4-19所示。因此,修改“dictionary['卷心菜'] = 'pamphrey'”不會改變dictionary2中的值,但修改dictionary中的子對象“dictionary['午餐'].remove('nooning')”時,dictionary2也會隨之改變。圖4-18 賦值引用示意圖字典的基本操作5.34.復制字典【程序說明】(續) “dictionary3 = copy.deepcopy(dictionary)”是深復制,dictionary3完全復制了父對象及其子對象,它和dictionary是完全獨立的,如圖4-20所示。因此,修改dictionary中的任何一個值,dictionary3中的值都不會隨之改變。圖4-20 深復制示意圖字典的遍歷5.41.遍歷字典中所有的“鍵-值”對使用item()方法可遍歷字典中所有的“鍵-值”對,該方法以列表形式返回可遍歷的“(鍵,值)”元組,其語法格式如下。dict.items()其中,dict表示字典。2.遍歷字典中所有的鍵當不需要使用字典中的值時,可使用keys()方法只遍歷字典中的鍵,該方法以列表形式返回字典中所有的鍵,其語法格式如下。dict.keys()其中,dict表示字典。字典的遍歷5.43.遍歷字典中所有的值當只需要使用字典中的值時,可使用values()方法,該方法以列表形式返回字典中所有的值,其語法格式如下。dict.values()其中,dict表示字典。【例4-17】 輸出中英文字典中所有的中文詞組及其對應的英文單詞、中文詞組和英文單詞。字典的遍歷5.4【參考代碼】dictionary = {'卷心菜': 'cabbage','午餐': 'lunch','機器人': 'robot','天空': 'sky','花': 'flower'} #創建字典dictionary并賦值print('中英文字典中所有中文詞組及其對應的英文單詞')for item in dictionary.items(): #遍歷“鍵-值”對print(item) #輸出每個“鍵-值”對print('中英文字典中所有中文詞組')for chinese in dictionary.keys(): #遍歷字典所有的鍵print(chinese, end=' ') #輸出每個鍵print('\n中英文字典中所有英文單詞')for english in dictionary.values(): #遍歷字典所有的值print(english, end=' ') #輸出每個值字典的遍歷5.4【運行結果】 程序運行結果如圖4-21所示。圖4-21 例4-17程序運行結果PART 06獨一無二的集合集合的創建6.1a = {1, 2, 3, 4} #創建集合并賦值print(a) #輸出集合a,結果為{1, 2, 3, 4}b = {2, 1, 3, 4, 1, 2} #創建集合并賦值print(b) #輸出集合b,結果為{1, 2, 3, 4}由上述代碼可以看出,由于集合元素是無序的,所以集合的輸出結果與定義順序可能不一致。創建集合只需將逗號分隔的不同元素使用大括號括起來即可。例如:集合的基本操作6.21.添加和刪除元素與字典類似,Python也提供了多種函數和方法用于集合元素的添加和刪除,具體操作的函數和方法如表4-5所示。表4-5 集合操作的函數和方法集合的基本操作6.21.添加和刪除元素例如:s = {1, 2, 3} #創建集合并賦值s.add(4) #添加元素print(s) #輸出集合,結果為{1, 2, 3, 4}s.update({4, 5, 6}) #更新當前集合,自動去除重復元素print(s) #輸出集合,結果為{1, 2, 3, 4, 5, 6}s.discard(5) #刪除元素,不存在則忽略該操作print(s) #輸出集合,結果為{1, 2, 3, 4, 6}s.remove(3) #刪除元素,不存在則拋出異常print(s) #輸出集合,結果為{1, 2, 4, 6}s.pop() #刪除并返回一個元素,返回值為1print(s) #輸出集合,結果為{2, 4, 6}集合的基本操作6.22.集合運算內置函數len()、max()、min()、sorted()等也適用于集合,此外,Python中集合還支持數學意義上的交集、并集、差集、補集等運算,具體操作符如表4-6所示。表4-6 集合類型的操作符集合的基本操作6.22.集合運算例如:a = {1, 2, 3, 4, 5} #創建集合并賦值b = {1, 2, 6, 7, 8} #創建集合并賦值print(a & b) #輸出交集,結果為{1, 2}print(a | b) #輸出并集,結果為{1, 2, 3, 4, 5, 6, 7, 8}print(a - b) #輸出差集,結果為{3, 4, 5}print(a ^ b) #輸出補集,結果為{3, 4, 5, 6, 7, 8}x = {1, 2, 3} #創建集合并賦值y = {2, 3} #創建集合并賦值z = {1, 2, 4} #創建集合并賦值print(x >= y) #判斷y是否為x的子集并輸出,結果為Trueprint(x <= z) #判斷x是否為z的子集并輸出,結果為False感謝觀看 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫