python數據類型分類 1).數值型:整數型(int)、浮點型(float)、布爾型(bool 取值:True、False) 2).容器類型 : 字元串型(str)、列表(list)、元祖(tuple)、字典(dict)、集合(set) 3).自定義類型:Person、Animal、Dog、Cat ...
python數據類型分類
1).數值型:整數型(int)、浮點型(float)、布爾型(bool 取值:True、False)
2).容器類型
: 字元串型(str)、列表(list)、元祖(tuple)、字典(dict)、集合(set)
3).自定義類型:Person、Animal、Dog、Cat、Student...
4).NoneType:None (理解:不存在、未明確的、未知的)
一. 字元串類型(str)
特點:屬於容器類型之一,滿足有序的(有索引)、可重覆的、不可變的數據類型(不可變:指字元串中某個位置的元素不允許改變,但是可以將整個字元串變數中的地址進行改變(意味著將字元串完全覆蓋掉))
1.自定義列印效果的顯示
使用:""" ... """ 或者 ''' ... ''' 來定義字元串數據,對於有些情況下,需要對定義的字元數據進行顯示樣式的把控,可以使用如下的方式定義字元串數據,可以做到換行的效果
1 content = """遙想公瑾當年,小喬出嫁了!
2 雄姿英發,羽扇綸巾,
3 談笑間,檣櫓灰飛煙滅"""
4 content1 = '''遙想公瑾當年,小喬出嫁了!
5 雄姿英發,羽扇綸巾,
6 談笑間,檣櫓灰飛煙滅'''
7 print(content)
8 print(content1)
2.轉義字元
轉義字元:將字元原本的含義去除,賦予一個新的含義
常見的轉義字元如下:
\n: 換行符
\t: 製表符
\b: 退格
\”: 雙引號
\': 單引號
如果字元串描述的是一串物理地址,在其中可能會包含一些轉義字元,那麼對於我們路徑的解析會造成錯誤,所以我們需要在字元串第一個引號的前面顯示的追加一個r,目的:就是為了避免轉義
1 address = "d:\\basic\\tpython1809\\day02\\note.txt"
2 address = r"d:\basic\tpython1809\day02\note.txt"
3 print(address)
3.字元串的*和+操作
字元串數據和字元串數據之間可以做拼接操作,使用+號來實現
字元串數據和整數之間使用*號連接,作用:讓字元串數據重覆執行多次
4.字元串的索引
起始索引:0
結束索引:-1 /
length - 1
5.內置函數len()的作用
例如:len(obj) --> 得到容器對象obj的長度/尺寸/容量
6.如何訪問字元串元素
1).獲取元素:
通過變數名配合下標來實現
2).設置元素:
由於字元串屬於不可變的數據類型,所以沒有設置元素這一說
7.常見的運行時異常:IndexError
以下代碼有問題:由於str1的長度為10,所以它的最大索引為9,
導致代碼出現IndexError類型的異常,原因是下標越界了,這種情況是需要避免的
8.字元串的切片操作
目的:從原串中得到部分子串數據,最終原串不會發生改變
格式:字元串變數[[start]:[end]:[step]]
【註意】:內部的中括弧表示可選的意思
參數解釋:start:起始位置;end:結束位置;step:步長(預設為1),滿足含頭不含尾的特點(99%的情況) [start,end)
9.占位符
在定義字元串數據時,可能在某些位置並不清楚需要填入什麼內容,那麼就先將位置占了,等到之後確定了數據再填入進去
1).百分號原則:
符號:
%d:整數占位符
%f:小數占位符
%s:萬能占位符
2).大括弧原則:
需要配合str類中的format()來使用得到效果
1 name = "jerry" 2 age = 18 3 height = 185.5 4 5 print("姓名:%s,年齡:%d,身高:%.1fcm" %("韓梅梅",21,163.5)) 6 print("姓名:%s,年齡:%010d,身高:%010.1fcm" %(name,age,height)) 7 8 print("最喜歡的歌手:{},最喜歡看的電影:{},最喜歡玩的游戲:{},最喜歡的編程語言:{}".format("張學友","海王","魔獸世界","python")) 9 print("最喜歡的歌手:{3},最喜歡看的電影:{1},最喜歡玩的游戲:{2},最喜歡的編程語言:{0}".format("java","蜘蛛俠","LOL","周傑倫")) 10 print("最喜歡的老師:{teacher},最喜歡看的電影:{film},最喜歡玩的游戲:{game},最喜歡的編程語言:{language}".format(language="js", 11 teacher="微微姐",film="小電影",game="超級瑪麗"))
10.字元串中常用的函數
1). ‘sep‘.join(seq) :sep分隔符,可以為空;seq連接的元素序列、字元串、元組、字典
【補充】os.path.join(): 將多個路徑組合後返回
2). ljust(width,format):將str數據顯示在左側,如果長度/尺寸不滿width,那麼右側補format
3). rjust(width,format):將str數據顯示在右側,如果長度/尺寸不滿width,那麼左側補format
4). center(width,format):將str數據顯示在中間,如果長度/尺寸不滿width,那麼左右側補format
5). zfill(width):將str數據顯示在右側,如果長度/尺寸不滿width,那麼左側補0
6). strip(): 去除字元串左、右兩側匹配到的字元數據,返回一個新串
7). lstrip():去除字元串左側匹配到的字元數據,返回一個新串
8). rstrip():去除字元串右側匹配到的字元數據,返回一個新串
9). replace(old,new,[number]):將str中的old內容替換為new,預設全部替換;也可以選擇性的替換number次
10). split(format):將str以format格式進行切割,返回一個列表對象;預設空參數的split()可以切割的內容:' '、\n、\t
11). index(s):返回字元串s在原串中對應的下標/索引,若存在多個相同數據,返回第一個匹配成功的,如果都沒有匹配成功,會報錯
12). count(s):返回字元串s在原串中出現的次數,如果一次都沒有出現,不會報錯,返回0
13). find(format):查找字元串中首次出現的format的位置
14). rfind(format):查找字元串中最後一次出現的format的位置
15). upper():將字元串數據變為全大寫
16).lower():將字元串數據變為全小寫
17).capitalize():將字元串數據首字母大寫,其餘字母小寫
18). title():將字元串數據首字母大寫,其餘字母小寫 備註:如果存在多個單詞,每個單詞首字母都要考慮
19). swapcase():將字元串中大寫變為小寫,小寫變為大寫
20). startswith(format):判斷字元串是否以format開頭,函數結果是布爾值
21). endswith():判斷字元串是否以format結尾,函數結果是布爾值
22). isalnum():判斷字元串的內容是否都是英文、數字字元;如果是,返回True;反之,返回False
23). isalpha():判斷字元串的內容是否都是英文字元;如果是,返回True;反之,返回False
24). isdecimal():判斷字元串的內容是否都是數字字元;如果是,返回True;反之,返回False
25). isdigit():判斷字元串的內容是否都是數字字元;如果是,返回True;反之,返回False
26). islower():判斷字元串中英文字元是否全小寫;如果是,返回True;反之,返回False 【註意】數字、其它字元不影響
27). isupper():判斷字元串中英文字元是否全大寫;如果是,返回True;反之,返回False 【註意】數字、其它字元不影響
28). istitle():判斷字元串內容中的英文子串(多組)的首字母是否大寫
1 lt = ['i','love','you','very','much'] 2 print('-'.join(lt)) 3 print(str.join('#',lt)) 4 5 str1 = 'i love you very much' 6 print(str1.ljust(50,'*')) #i love you very much****************************** 7 print(str1.rjust(50,'-')) #------------------------------i love you very much 8 print(str.rjust(str1,50,'$')) #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$i love you very much 9 print(str1.center(50,'^')) #^^^^^^^^^^^^^^^i love you very much^^^^^^^^^^^^^^^ 10 print(str1.zfill(50)) #000000000000000000000000000000i love you very much 11 12 str1 = ' ,,,..\ i hate you very much ...,,;;\ ' 13 print(str1.lstrip('\ ,.')) #i hate you very much ...,,;;\ 14 print(str1.rstrip('\;., ')) #,,,..\ i hate you very much 15 print(str1.strip(',\;. ')) #i hate you very much 16 17 str1 = "python啊python,你是我的驕傲!python啊python,我為你自豪!" 18 print(str1.replace('python','java')) #java啊java,你是我的驕傲!java啊java,我為你自豪! 19 print(str1.replace('python','java',2)) #java啊java,你是我的驕傲!python啊python,我為你自豪! 20 21 str1 = 'i love\nabc you\t very\n much' 22 print(str1.split(' ')) #['i', 'love\nabc', 'you\t', 'very\n', 'much'] 23 print(str1.split()) #['i', 'love', 'abc', 'you', 'very', 'much'] 24 print(str1.split('\n')) #['i love', 'abc you\t very', ' much'] 25 print(str1.splitlines()) #['i love', 'abc you\t very', ' much'] 26 27 str1 = 'abcdefgd1234567' 28 print(str1.index('d')) #3 29 print(str1.index('efg')) #4 30 print(str1.index('xyz')) #報錯 31 32 str1 = 'dsaalkfaaasdfaaaa2141aaaaaaxyz' 33 print(str1.count('a')) #15 34 print(str1.count('aa')) #7 35 print(str1.count('www')) #0 36 37 str1 = '山不在在高,有仙則靈;水不在在深,有龍則靈;斯是在在陋室,惟吾德馨' 38 print(str1.find('在在')) #2 39 print(str1.rfind('在在')) #24 40 41 str1 = 'today is thursday PM' 42 print(str1.upper()) #TODAY IS THURSDAY PM 43 print(str1.lower()) #today is thursday pm 44 print(str1.capitalize()) #Today is thursday pm 45 print(str1.title()) #Today Is Thursday Pm 46 print(str1.swapcase()) #TODAY IS THURSDAY pm 47 48 str1 = 'hahaha abcdefghijk 32141234 hehehe' 49 print(str1.startswith('h')) #True 50 print(str1.startswith('ha')) #True 51 print(str1.startswith('haha')) #True 52 print(str1.startswith('Haha')) #False 53 print(str1.startswith('hahha')) #False 54 55 print(str1.endswith('e')) #True 56 print(str1.endswith('he')) #True 57 print(str1.endswith('ehe')) #True 58 print(str1.endswith('Hehe')) #False 59 60 str1 = '3214Love&Tdsajflks*^' 61 print(str1.isalnum()) #False 62 print(str1.isalpha()) #False 63 print(str1.isdigit()) #False 64 print(str1.isdecimal()) #False 65 print(str1.islower()) #False 66 print(str1.isupper()) #False 67 print(str1.istitle()) #Ture
二. 列表類型(list)
特點:有序的(有索引、定義和顯示的順序是一致的)、可變的(既可以改變元素的內容也可以自動(擴縮)容)、可重覆的、可以存儲任何數據類型的元素
1.如何訪問列表中的元素
1).獲取元素
列表名配合下標獲取 --> 例如:lt[0],lt[-1]
2).設置元素(和str有區別)
列表名配合下標 = ... --> 例如:lt[4] = "武大郎"
2.列表的+和*操作
對於+操作而言:將兩個列表對象中的元素都組合起來以一個新的列表返回
對於*操作而言:將列表中的元素重覆出現n次,以新的列表返回
3.和列表有關的一些函數
append(obj):將obj元素追加到列表的末尾
clear():清空列表,元素沒了,列表對象還在 : lt.clear()
4.del關鍵字配合列表對象/元素使用
目的:回收列表對象,並且回收其中的元素內容(即可以回收列表對象,也可以回收列表元素):del lt
del可以刪除列表中指定位置的元素:del lt[1]
5.列表的切片操作
格式和特點和str一模一樣...
1 lt6 = ['葫蘆娃','黑貓警長','熊出沒','灌籃高手','柯南','海爾兄弟'] 2 lt7 = lt6[1:5] 3 print(lt7,type(lt7)) 4 print(lt6,type(lt6)) 5 print(lt6[2:-2]) 6 print(lt6[:]) 7 print(lt6[::-1])
6.歸納總結列表的定義格式
格式一:列表名 = [值1,值2,...,值n]
格式二:列表名 = [變數1,變數2,...,變數n] = [值1,值2,...,值n]
格式三:列表名 = []
7. list中常用的函數
1). append(obj):將obj存入到列表的最後一個位置
2). extend(iterable):將iterable對象中的每個元素分別取出存入到列表的最後位置
3).index(obj):返回obj在列表中出現的索引位置;如果存在多個相同的obj元素,返回的是第一次出現的那個元素的索引;如果一個有沒有,直接報錯
4). count(obj):返回obj在列表中出現的次數;如果一次都沒有出現,返回0
5). pop([index]):如果是空參數的pop(),將列表最後一個元素彈出(作為返回值給程式);如果有參數,必須是索引值,將具體索引位置上的元素彈出
6). remove(element):刪除和element匹配的某個元素,沒有返回值;如果有多個匹配的,只刪除第一個
7). reverse():反轉列表元素
8). sort([reverse=True],[key=...]):預設以升序排列(reverse=False),如果想要降序排列,顯示定義reverse=True
1 lt = ['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克'] 2 lt.append('香克斯') 3 print(lt) # ['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克','香克斯'] 4 lt.append(['卡卡西','鳴人','佐助','櫻']) 5 print(lt) # ['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克','香克斯',['卡卡西','鳴人','佐助','櫻']] 6 7 lt = ['路飛','索羅','山治','娜美'] 8 lt.extend(['卡卡西','鳴人','佐助','櫻']) # ['路飛', '索羅', '山治', '娜美','卡卡西', '鳴人', '佐助', '櫻'] 9 lt.extend('大蛇丸') 10 print(lt) # ['路飛', '索羅', '山治', '娜美', '卡卡西', '鳴人', '佐助', '櫻', '大', '蛇', '丸'] 11 lt.extend(200) # TypeError: 'int' object is not iterable 12 13 lt = ['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克','娜美'] 14 print(lt.index('娜美')) # 3 15 # print(lt.index('娜美1')) # 報錯ValueError 16 17 print(lt.count('路飛')) #1 18 print(lt.count('娜美')) #2 19 print(lt.count('娜美1')) #0 20 21 print(lt.pop()) #娜美 22 print(lt) #['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克'] 23 print(lt.pop(1)) # 索羅 24 print(lt) #['路飛', '山治', '娜美', '烏索普', '喬巴', '布魯克'] 25 # lt.pop('喬巴') # 報錯 非法操作 26 27 lt = ['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克','娜美'] 28 print(lt.remove('山治')) # None 29 print(lt) #['路飛','索羅','娜美','烏索普','喬巴','布魯克','娜美'] 30 lt.remove('娜美') 31 print(lt) #['路飛','索羅','烏索普','喬巴','布魯克','娜美'] 32 33 print(lt.clear()) #None 34 print(lt) #[] 35 36 lt = ['路飛','索羅','山治','娜美','烏索普','喬巴','布魯克','娜美'] 37 lt.reverse() 38 print(lt) #得到['娜美','布魯克','喬巴','烏索普','娜美','山治','索羅','路飛'] 39 40 lt1 = [53,23,-17,9,-21,0,79,88,-30] 41 lt1.sort() 42 print(lt1) #[-30, -21, -17, 0, 9, 23, 53, 79, 88] 43 lt1.sort(reverse=True) 44 print(lt1) #[88, 79, 53, 23, 9, 0, -17, -21, -30]
三. 元祖類型(tuple)
特點:有序的(有索引、定義和顯示的順序是一致的)、不可變的(和str一樣理解)、可重覆的、可以存儲任何數據類型的元素
1.如何訪問元祖中的元素
1).獲取元素
元祖名配合下標獲取 -->
例如:tp[0],tp[-1]
2).設置元素(和str保持一致)
沒有此操作,是非法的,原因元祖是不可變的數據類型
2.元祖的+和*操作
對於+操作而言:將兩個元祖對象中的元素都組合起來以一個新的元祖返回
對於*操作而言:將元祖中的元素重覆出現n次,以新的元祖返回
【註意事項】元祖有沒有類似於列表的append或者clear函數,因為append和clear這類函數改變的都是容器對象內部的元素內容,這和不可變所衝突
3.del關鍵字配合元祖對象使用
目的:回收整個元祖對象,但是對於tuple類型而言無法回收其任何一個元素
4.元祖的切片操作
格式和特點和str一模一樣...
5.歸納總結元祖的定義格式
格式一:元祖名 = (值1,值2,...,值n)
格式二:元祖名 = (變數1,變數2,...,變數n) = (值1,值2,...,值n)
格式三:元祖名 = ()
格式四:元祖名 = (值1,) 【註意】:定義元祖並且只有一個元素,必須在元素後顯示的加上一個逗號
四. 字典類型(dict)
特點:無序性(沒有索引,通過鍵找值)、可變的數據類型(值可變、鍵不可變);字典的結構是鍵值對組合 --> key-value對象;鍵(key):唯一性(不可重覆)、不可變的數據類型(例如:list就不能作為鍵);值(value):沒有任何要求,可以是任何類型的數據,甚至可以重覆
1.如何訪問字典元素
1).獲取值:字典名配合鍵名可以得到對應的值
1 dic1 = {"name":"韓梅梅","age":23,"height":165.0} 2 dic1['name'] # 韓梅梅
2).設置值:字典名配合鍵名 = ...
【註意事項】1.在定義字典對象的時候如果出現了重覆的鍵,保留鍵名的同時,將後者的值覆蓋前面的值。2.在添加新的鍵值對的過程中,如果原字典對象中沒有此鍵,那麼就將其鍵值對一併加入進去,稱為一個元素。
1 dic2 = {"name":"韓梅梅","age":23,"height":165.0,"name":"李雷"} 2 dic2['weight'] = 120 3 print(dic2)
2.字典相關函數
clear():清空字典元素,保留空字典對象,dic2.clear( )
3.和關鍵字del配合使用
目的:回收鍵值對組合,或者整個字典對象;del dic2['age'] # 刪除年齡鍵值對;del dic2 # 刪除所有(數據和整個字典結構)
4.通過鍵查找值的情況
方式一:字典名[鍵名] 如果鍵不存在,報錯;出現KeyError類型的異常;dic2["name1"]
方式二:字典名.get(鍵名) 如果鍵不存在,不會報錯,會返回給程式一個None值;此方式比較安全/友好(更加好用);dic2.get("name1")
【註意事項】鍵:必須滿足不可變的數據類型;枚舉:int、float、bool、str、None等都可以充當鍵,滿足唯一性(不可重覆);值:沒有要求,任何類型都可以,甚至可重覆。
5.dict中常用的函數
1). dic1.update(dic2):將dic2中每一個鍵值對和dic1中的進行比較,如果dic1中經過存在相同的 鍵,那麼就保證鍵不變,值被覆蓋;如果dic1中沒有相應的鍵值對,那麼就將其加入進dic1中
items():返回一個dict_items類型的對象,內部封裝了一個一個元祖充當其元素,元祖中包含鍵和值兩塊內容
keys():返回一個dict_keys類型的對象,內部封裝了鍵集
values():返回一個dict_values類型的對象,內部封裝了值集
popitem():彈出最後一個鍵值對,以元祖的形式返回
pop(key):傳入key時,彈出整個鍵值對,最終返回給程式value
copy():拷貝 ;dict1.copy()
1 dic1 = {"name":"張三豐","age":120,"height":168.0} 2 dic2 = {"name":"金毛獅","weight":100,"faceValue":False,"girlFriend":"滅絕師太"} 3 dic1.update(dic2) 4 print(dic1) #得到{'name': '金毛獅王', 'age': 120, 'height': 168.0, 'weight': 100, 'faceValue': False, 'girlFriend': '滅絕師太'} 5 print(dic2) #得到{'name': '金毛獅王', 'weight': 100, 'faceValue': False, 'girlFriend': '滅絕師太'} 6 7 dic1 = {"name":"張三豐","age":120,"height":168.0} 8 print(dic1.items(),type(dic1.items())) #得到dict_items([('name', '張三豐'), ('age', 120), ('height', 168.0)]) <class 'dict_items'> 9 print(dic1.keys(),type(dic1.keys())) #得到dict_keys(['name', 'age', 'height']) <class 'dict_keys'> 10 print(dic1.values(),type(dic1.values())) #得到dict_values(['張三豐', 120, 168.0]) <class 'dict_values'> 11 12 dic2 = {"name":"金毛獅","weight":100,"faceValue":False,"girlFriend":"滅絕師太"} 13 print(dic2.popitem()) #('girlFriend', '滅絕師太') 14 print(dic2) #{'name': '金毛獅王', 'weight': 100, 'faceValue': False} 15 print(dic2.pop('weight')) #100 16 print(dic2) #{'name': '金毛獅王', 'faceValue': False} 17 18 dic3 = dic2.copy() # id改變 19 print(dic2,id(dic2)) #得到{'name': '金毛獅王', 'weight': 100, 'faceValue': False, 'girlFriend': '滅絕師太'} 5999280 20 print(dic3,id(dic3)) #得到{'name': '金毛獅王', 'weight': 100, 'faceValue': False, 'girlFriend': '滅絕師太'} 5999352
五. 集合類型(set)
特點:無序性(沒有索引,每一次顯示的效果都不一樣)、唯一性(不可重覆)、可變的、只能存放不可變的數據。使用場景:在實際開發過程中,經常用於對數據進行去重(過濾)
1.集合的一些常用操作如下
以下的操作都是在兩個集合對象中使用
符號:
&:取交集
|:取並集
-:取差集(對於取差集的操作,需要關註的是誰在-號的前面(左側),返回的就是誰獨有的數據)
^:先取並集再捨棄交集部分
【註意事項】對於集合和集合之間沒有+操作。會出現TypeError類型的錯誤
2.集合相關的函數
clear():清空集合,保留外殼
3.和關鍵字del配合使用
目的:回收集合元素,或者