一、dict字典
1.概述
思考問題:保存多個(gè)學(xué)生的成績(jī)
list1 = [65,7,8,99,100]
tuple1 = (65,7,8,99,100)
存在的問題:無法學(xué)生和成績(jī)的匹配
解決問題:字典,將學(xué)生姓名作為key,成績(jī)作為value,進(jìn)行存儲(chǔ),方便查找
本質(zhì):也只一種存儲(chǔ)數(shù)據(jù)的方式,數(shù)據(jù)是以鍵值對(duì)的形式存儲(chǔ)的,但是字典是無序的
優(yōu)點(diǎn):具有快速查找的優(yōu)勢(shì)
2.key的特性
a.字典中的key必須是唯一的
b.字典中的key必須是不可變的
? list是可變的,不能充當(dāng)key
? tuple是不可變的,可以充當(dāng)key,整數(shù),字符串都可以充當(dāng)key
3.字典的創(chuàng)建
語法:字典名稱 = {key1:value1,key2:value2,.......}
代碼演示:
#創(chuàng)建空字典 dict1 = {} #創(chuàng)建帶有鍵值對(duì)的字典 dict2 = {"zhangsan":96,"lisi":60,"jack":80} print(dict2)
4.元素訪問
4.1 獲取
語法:字典名[key]
代碼演示:
#字典中元素的訪問 dict1 = {"zhangsan":96,"lisi":60,"jack":80} #1.獲取 #通過key獲取對(duì)應(yīng)的value score = dict1["lisi"] print(score) #如果key不存在的時(shí)候,無法訪問 #print(dict1["tom"]) #KeyError: 'tom' #雖然key不存在,但是不會(huì)報(bào)錯(cuò),返回的是None result = dict1.get("tom") print(result) if result == None: print("key不存在") else: print("key是存在的")
4.2 添加
代碼演示:
#2.修改和添加 print(dict1) #當(dāng)key不存在的時(shí)候,表示添加一對(duì)鍵值對(duì) dict1["tom"] = 70 print(dict1) #當(dāng)key存在的時(shí)候,表示修改對(duì)應(yīng)的value dict1["lisi"] = 88 print(dict1)
4.3 刪除
代碼演示:
#3.刪除 #注意:刪除指定的key,則對(duì)應(yīng)的value也會(huì)隨著被刪除 dict1.pop("lisi") print(dict1)
5.字典的遍歷
代碼演示:
dict1 = {'zhangsan': 96, 'lisi': 88, 'jack': 80, 'tom': 70} #1.只獲取key【掌握】 for key in dict1: #通過key獲取value value = dict1[key] print(key,"=",value) #2.只獲取value #將所有的value重新生成了一個(gè)列表 list1 = dict1.values() print(list1) for value in list1: print(value) #3.同時(shí)獲取鍵值對(duì)的索引以及key for i,key in enumerate(dict1): print(i,key) print(dict1[key]) #4.同時(shí)獲取key和value【掌握】 for key,value in dict1.items(): print(key,value)
6.
代碼演示:
#1.逐一顯示指定字典中的所有鍵,并在顯示結(jié)束之后輸出總鍵數(shù) dict1= {"x":1,"y":2,"z":3} #count1 = 0 for key in dict1: print(key) #count1 += 1 else: print(len(dict1)) #2.list1 = [0,1,2,3,4,5,6],list2 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].以list1中的元素作為key, # 以list2中的元組作為value生成一個(gè)新的字典dict2 list1 = [0,1,2,3,4,5,6] list2 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"] dict2 = {} #{0:"Sun",1:"Mon".....} #定義一個(gè)變量,作為list1和list2的索引 index = 0 #前提:兩個(gè)列表的長(zhǎng)度相等 if len(list1) == len(list2): while index < len(list1): #當(dāng)字典中不存在某個(gè)key-value時(shí),賦值于相當(dāng)于添加一對(duì)鍵值對(duì) dict2[list1[index]] = list2[index] #dict2[0] = "Sun" #為了循環(huán)可以在適當(dāng)?shù)臅r(shí)機(jī)停止下來,可以將list1和list2中的元素全部獲取出來,賦值給字典 index += 1 print(dict2)
二、set集合
1.概述
和數(shù)學(xué)上的集合基本是一樣的,
特點(diǎn):不允許有重復(fù)元素,可以進(jìn)行交集,并集,差集的運(yùn)算
本質(zhì):無序,無重復(fù)元素的集合
2.創(chuàng)建
set(列表或者元組或者字典)
代碼演示:
#注意:set的創(chuàng)建需要借助于list和tuple #1.通過list創(chuàng)建set list1 = [432,5,5,46,65] s1 = set(list1) print(list1) print(s1) #注意1:set中會(huì)自動(dòng)將重復(fù)元素過濾掉 #2.通過tuple創(chuàng)建set tuple1 = (235,45,5,656,5) s2 = set(tuple1) print(tuple1) print(s2) #3.通過dict創(chuàng)建set dict1 = {1:"hello",2:"good"} s3 = set(dict1) print(dict1) #{1: 'hello', 2: 'good'} print(s3) #{1, 2} #注意2:set跟dict類似,都使用{}表示,但是與dict之間的區(qū)別在于:set中相當(dāng)于只存儲(chǔ)了一組key,沒有value
3.操作
3.1添加
代碼演示:
#1.添加 #add() 在set的末尾進(jìn)行追加 s1 = set([1,2,3,4,5]) print(s1) s1.add(6) print(s1) #注意:如果元素已經(jīng)存在,則添加失敗 s1.add(3) print(s1) #print(s1.add(3)) #s1.add([7,8,9]) #TypeError: unhashable type: 'list' list是可變的,set中的元素不能是list類型 s1.add((7,8,9)) #s1.add({1:"a"}) #TypeError: unhashable type: 'dict' ,dict中的鍵值對(duì)可以改變,set中的元素不能是dict類型 print(s1) #update() 插入【末尾添加】,打碎插入【直接將元組,列表中的元素添加到set中,將字符串中的字母作為小的字符串添加到set中】 s2 = set([1,2,3,4,5]) print(s2) s2.update([6,7,8]) s2.update((9,10)) s2.update("good") #注意:不能添加整型,因?yàn)檎筒荒苁褂胒or循環(huán)遍歷 #s2.update(11) #TypeError: 'int' object is not iterable print(s2)
3.2刪除
代碼演示:
#2.刪除 #remove() s3 = set([1,2,3,4,5]) print(s3) s3.remove(3) print(s3)
3.3遍歷
代碼演示:
#3.set的遍歷 s4 = set([1,2,3,4,5]) for i in s4: print(i) #注意:set是沒有索引的,所以不能通過s4[2]獲取元素,原因:set是無序的 #print(s4[2]) #TypeError: 'set' object does not support indexing #注意:獲取的是編號(hào)和元素值 for i,num in enumerate(s4): print(i,num)
3.4交集和并集
代碼演示:
#4.交集和并集 s4 = set([1,2,3]) s5 = set([4,5,3]) #交集:&【按位與】 and r1 = s4 & s5 print(r1) print(type(r1)) #并集:|【按位或】 or r2 = s4 | s5 print(r2)
三、String字符串
1.概述
由多個(gè)字母,數(shù)字,特殊字符組成的有限序列
在Python中,使用單引號(hào)或者雙引號(hào)都可以表示字符串
注意:沒有單符號(hào)的數(shù)據(jù)類型
'a' "a"
2.創(chuàng)建字符串
代碼演示:
str1 = "hello" str2 = "abc1234" str3 = "***fhhg%%%" str4 = "中文"
3.字符串運(yùn)算
代碼演示:
#1.+ 字符串連接 s1 = "welcome" s2 = " to China" print(s1 + s2) #注意:在Python中,使用+。只能是字符串和字符串之間。和其他數(shù)據(jù)類型使用的話不支持 #print("abc" + 10) #print("123" + 1) #print(1 + "12" + 12) #print("hello" + True) #2. * 字符串重復(fù) s3 = "good" print(s3 * 3) #3.獲取字符串中的某個(gè)字符 """ 類似于列表和元組的使用,通過索引來獲取指定位置的字符 注意索引的取值范圍【0~長(zhǎng)度 - 1】,同樣會(huì)出現(xiàn)索引越界 訪問方式:字符串名稱[索引] """ s4 = "abcdef" print(s4[1]) #print(s4[10]) #IndexError: string index out of range #獲取字符串的長(zhǎng)度:len() #遍歷字符串,和list,tuple的用法完全相同 for element in s4: print(element) for index in range(0,len(s4)): print(s4[index]) for index,str in enumerate(s4): print(index,str) #4.截取字符串【切片】 str1 = "hello world" #指定區(qū)間 print(str1[3:7]) #從指定位置到結(jié)尾,包含指定位置 print(str1[3:]) #從開頭到指定位置,但是不包含指定位置 print(str1[:7]) str2 = "abc123456" print(str2[2:5]) #c12 print(str2[2:]) #c123456 print(str2[2::2]) #c246 print(str2[::2]) #ac246 print(str2[::-1]) #654321cba 倒序 print(str2[-3:-1]) #45 -1表示最后一個(gè)字符 #5.判斷一個(gè)子字符串是否在原字符串中 #in not in str3 = "today is a good day" print("good" in str3) print("good1" not in str3)
4.格式化輸出
通過%來改變后面字母或者數(shù)字的含義,%被稱為占位符
? %d 整數(shù)
? %f 浮點(diǎn)型,特點(diǎn):可以指定小數(shù)點(diǎn)后的位數(shù)
? %s 字符串
代碼演示:
#6.格式化輸出 num = 10 string1 = "hello" print("string1=",string1,"num=",num) #注意:變量的書寫順序盡量和前面字符串中出現(xiàn)的順序保持一致 print("string1=%s,num=%d"%(string1,num)) f = 12.247 print("string1=%s,num=%d,f=%f"%(string1,num,f)) #需求:浮點(diǎn)數(shù)保留小數(shù)點(diǎn)后兩位 print("string1=%s,num=%d,f=%.2f"%(string1,num,f)) #round(12.247,2)
5.常用轉(zhuǎn)義字符
通過\來改變后面字母或者特殊字符的含義
? \t 相當(dāng)于tab鍵
? \n 相當(dāng)于enter鍵
? \b 相當(dāng)于backspace
代碼演示:
#7.轉(zhuǎn)義字符 string2 = "hello\tworld" string21 = "hello world" print(string2) print(string21) #換行:\n 多行注釋 string3 = "hello\nPython" string31 = """hello python2354623 """ print(string3) print(string31) #需求:"hello" print("\"hello\"") #C:\Users\Administrator\Desktop\SZ-Python1805\Day6\視頻 print("C:\\Users\\Administrator\\Desktop") #注意;如果一個(gè)字符串中有多個(gè)字符需要轉(zhuǎn)義,則可以在字符串的前面添加r,可以避免對(duì)字符串中的每個(gè)特殊字符進(jìn)行轉(zhuǎn)義 print(r"C:\Users\Administrator\Desktop")
6.常用功能
6.1獲取長(zhǎng)度和次數(shù)
代碼演示:
#1.計(jì)算字符串長(zhǎng)度 len #類似于list和tuple的中獲取長(zhǎng)度的用法 str1 = "hfufhja" l = len(str1) print(l) #2,計(jì)算某個(gè)字符或者子字符串在原字符串中出現(xiàn)的次數(shù) count str2 = "this is a good day good day" #count(str,[start,end]) #在整個(gè)字符串中進(jìn)行查找 print(str2.count("day")) #在指定區(qū)間內(nèi)進(jìn)行查找 print(str2.count("day",3,10))
6.2大小寫轉(zhuǎn)換
代碼演示:
#注意:使用字符串中的功能,一般情況下,都是生成一個(gè)新的字符串,原字符串沒有發(fā)生任何變化 #3.大小寫字母轉(zhuǎn)換 #lower() 將字符串中的大寫字母轉(zhuǎn)換為小寫 str31 = "Today Is a Good day" astr31 = str31.lower() print(astr31) #uppper() 將字符串中小寫字母轉(zhuǎn)換為大寫 str32 = "Today Is a Good day" astr32 = str2.upper() print(astr32) #swapcase() 將字符串中小寫字母轉(zhuǎn)換為大寫,大寫字母轉(zhuǎn)換為小寫 str33 = "Today Is a Good day" astr33 = str33.swapcase() print(astr33) #capitalize() 將一句英文中首單詞的首字母轉(zhuǎn)化為大寫,其他小寫 str34 = "today Is a Good day" astr34 = str34.capitalize() print(astr34) #title() 將一句英文中每個(gè)單詞的首字母大寫 str35 = "today is a good day" astr35 = str35.title() print(astr35)
6.3整數(shù)和字符串轉(zhuǎn)換
代碼演示:
4.字符串和數(shù)字之間的轉(zhuǎn)換 #int() float() str() #eval(str) 將str轉(zhuǎn)換為有效的表達(dá)式,參與運(yùn)算,并返回運(yùn)算結(jié)果 num1 = eval("123") print(num1) #print("123") print(type(num1)) print(int("123")) #eval和int將+和-當(dāng)做正負(fù)號(hào)處理 print(eval("+123")) print(int("+123")) print(eval("-123")) print(int("-123")) #將12+3字符串轉(zhuǎn)換為了有效的表達(dá)式,并運(yùn)算了結(jié)果 print(eval("12+3")) #15 #不成立 #print(int("12+3")) #ValueError: invalid literal for int() with base 10: '12+3' print(eval("12-3")) #9 #print(int("12-3")) #ValueError: invalid literal for int() with base 10: '12-3' #print(eval("a123")) #NameError: name 'a123' is not defined #print(int("a123")) #ValueError: invalid literal for int() with base 10: 'a123' #總結(jié):注意區(qū)分eval和int【eval:轉(zhuǎn)換有效的表達(dá)式 int:將字符串轉(zhuǎn)換為整型】