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配合使用
目的:回收集合元素,或者回收整個集合物件
1 s1 = {"貂蟬","西施","王昭君","玉環"} 2 s1.clear() 3 print(s1) # set() 4 del s1 5 print(s1) # 直接全刪了,什么都不剩,所以報錯NameError:name's1'is not defined
思考:洗掉"貂蟬"這個資料,該怎么做到?
1).可以使用remove(obj)函式來實作;2).先將集合轉換為串列 --> 使用轉換函式list() , 再使用回圈的思想,來處理串列物件,一旦匹配上了"貂蟬",就可以使用del關鍵字進行資料洗掉的行為
1 # 方法1 2 s1.remove("貂蟬") 3 4 # 方法2 5 lt = list(s1) # 將集合轉換為串列 6 i = 0 7 while i < len(lt): 8 if lt[i] == "貂蟬": 9 print(lt[i]) 10 del lt[i] 11 i += 1 12 print(lt)
4.定義一個空集合
s1 = set( )
5. set中常用的函式
1). add(e):添加一個元素e(不可變的資料型別)到集合中
2). pop(): 只能是空參的(集合沒有索引的概念),隨機從集合中彈出一個元素
3). remove(e):從集合中洗掉和e匹配的元素
4).clear():清空集合,保留容器
5).copy(): 拷貝
6).issubset(s):判斷一個集合是否是另一個集合的子集;s1.issubset(s2) >>> s1是否是s2的子集
7). issuperset(s):判斷一個集合是否是另一個集合的父集;s1.issubset(s2) >>> s1是否是s2的父集
8). isdisjoint(s):判斷兩個集合之間是否存在交集,如果存在,回傳False;反之,回傳True
1 s1 = {10,100,3.14,"abcd"} 2 s2 = {3.141,100} 3 s1.add('hello') 4 print(s1.pop()) 5 s1.remove(100) 6 s1.clear() 7 print(s1) #set() 8 print(s1.issubset(s2)) #False 9 print(s1.issuperset(s2)) #True 10 print(s1.isdisjoint(s2)) #False 11 print(s2.isdisjoint(s1)) #False
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195334.html
標籤:Python
上一篇:Python3(十一) 原生爬蟲
