基礎數據類型 1、什麼是數據類型? 我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行 ...
基礎數據類型
1、什麼是數據類型?
我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行了明確的劃分,你想讓電腦進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字元串類型給他。Python中常用的數據類型有多種,如下:
整數(int) 、字元串(str)、布爾值(bool)、列表(list)、元組(tuple)、字典(dict)、集合(set)
2、基礎數據類型
2.1、數字(int)
數字使用來計算的,使用場景不多,我們知道有這個數據類型,會使用一種即可:
#數字int #bit_length() 當十進位用二進位表示時,最少使用的位數 aihuidi = 11 data = aihuidi.bit_length() print(data)
2.2、布爾值(bool)
布爾值就兩種:True、False。含有條件就時正確與不正確(否)
真 1 True
假 0 False
2.3、
字元串(str)
字元串的索引與切片
索引即下標,就時字元串組成的元素從第一個開始,初始索引為0以此往後推。
#索引:
aihuidi = 'ABCDEFGHIJKLMNOPQRSTUVWSXYZ' print(aihuidi[0]) print(aihuidi[3]) print(aihuidi[8]) print(aihuidi[23])
切片就是通過索引(索引:索引:步長)截取字元串的一段,形成新的字元串(原則就是顧頭不顧腚)。
#切片: aihuidi = 'ABCDEFGHIJKLMNOPQRSTUVWSXYZ' print(aihuidi[0:8]) print(aihuidi[3:16]) print(aihuidi[0:]) #預設列印到最後一個 print(aihuidi[0:-1]) #-1 是列表中的最後一個元素,但是要滿足顧頭不顧腚的原則,所以取不到Z元素 print(aihuidi[0:5:2]) #加步長 print(aihuidi[5:0:-2]) #反向加步長
字元串的常用方法。
name = "aihuidi" print(name.capitalize()) #首字母大寫 print(name.swapcase()) #大小寫反轉 hhh = 'dong liu weu mng' print(hhh.title()) #每個單詞的首字母大寫 #內同居中,總長度為20,空白處以*填充 a1 = '1a3a45haj' ret2 = a1.center(20,"*") print(ret2) #a在字元串中的元素出現的個數 ret3 = a1.count("a",0,8) #可切片 print(ret3) a4 = "aihuidi is my hhh" ret4 = a4.startswith('aihuidi') #.startswith判斷是否以'aihuidi'開頭,是的話返回True,不是返回False ret4 = a4.startswith('my',11,13) print(ret4) ret4 = a4.endswith('h') #.endswithh判斷是以'h'結尾,是的話返回True,不是返回False print(ret4) #尋找字元串中的元素是否存在 ret5 = a4.find("is",8,10) print(ret5) #如果存在返回找到的元素的索引,找不到返回-1 ret6 = a4.index("is",8,10) #如果存在返回找到的元素的索引,找不到報錯 print(ret6) #.split 以什麼分割,最終形成一個列表,然而此列表不含有這個分割的元素 ret7 = 'title,Tilte,atre,'.split('t') print(ret7) #format的三種使用,格式化輸出 res='{} {} {}'.format('aihuidi',19,'hhh') res1='{2} {0} {1}'.format('aihuidi',19,'hhh') res2='{name} {age} {your}'.format(your='hhh',age='19',name='aihuidi') print(res) print(res1) print(res2) #strip用於移除字元串頭尾指定的字元,註意:該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。 name = '*aihuidi**' print(name.strip('*')) #去除首尾的* print(name.lstrip('*')) print(name.rstrip('*')) #replace字元串中的 old(舊字元串) 替換成 new(新字元串) name = 'aihuidi hhhh is shi ge ddddd aihuidi' print(name.replace('aihuidi','你是',1)) #把'aihuidi'替換成'你是' #is系列 name = 'aihuidi678' print(name.isalnum()) #字元串由字母或數字組成的 print(name.isalpha()) #字元串只由字母組成 print(name.isdigit()) #字元串只由數字組成
2.3、元組(tuple)
元組被稱為只讀列表,即數據可以被查詢,但不能被修改,所以,字元串的切片操作同樣適用於元組。例:(1,2,3)("a","b","c")
2.4、列表(list)
列表是python中的基礎數據類型之一,其他語言中也有類似於列表的數據類型,比如js中叫數組,他是以 [] 括起來,每個元素以逗號隔開,而且他裡面可以存放各種數據類型比如:
list = ['aihudi',233,(5,6,'hhh'),[7,8,'dddd'],{'nnnn'}]
列表相比於字元串,不僅可以儲存不同的數據類型,而且可以儲存大量數據,32位python的限制是 536870912 個元素,64位python的限制是 1152921504606846975 個元素,
而且列表是有序的,有索引值,可切片,方便取值。
#增
list = ['aihuidi',1,6,8,'hhhh',9] list.insert(0,55) #按照索引去增加 list.insert(2,66) list.append('mmm') #增加到最後 list.extend(['q,f,b']) #迭代的去增 list.extend('jjjj') print(list) #刪 li = ['hhhh','nnnn',1,6,8,'add'] ll = li.pop(1) #按照位置進行刪除,有返回值,"返回的就是你所刪除的那個" print(ll) del li[1:4] #可以按位置刪除,也可以切片刪除沒有返回值 print(li) li.remove('add') #按照元素進行刪除,沒有返回值 print(li) li.clear() #清空列表 #改 lll = [2,4,6,8,10,'aihuidi','a'] lll[0] = 12 lll[5] = 'hhhhh' lll[2:4] = ['b','n'] print(lll) #查 切片去查,或者迴圈去查。
其他一些操作用法
#count用法:計算或 統計某個元素出現的次數 aaa = ["a","b","a","k","e"] print(aaa.count("a")) #index用法:從列表中找出某個值第一個匹配項的索引位置 print(aaa.index("k")) #sort用法:用於在原位置對列表進行排序 bbb = [3,5,1,4,2] bbb.sort() print(bbb) #reverse用法:將列表中的元素反向存放 bbb.reverse() print(bbb)
2.5、字典(dict)
字典是python中唯一的映射類型,採用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,所以字典是無序存儲的,且key必須是可哈希的。可哈希表示key必須是不可變類型,如:數字、字元串、元組。
字典(dictionary)是除列表意外python之中最靈活的內置數據結構類型。列表是有序的對象結合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
字典的語法:
#key-value info = { 'stu1': "aihuidi", 'stu2': "hhhh", 'stu3': "dddd", } print(info) print(info["stu1"])
基礎使用:
info = { 'stu1': "aihuidi", 'stu2': "hhhh", 'stu3': "dddd", } # print(info) # print(info["stu1"]) #增加 info["stu4"] = "laili" print(info) #修改 info["stu1"] = "愛輝弟" print(info) #刪除 info.pop("stu1") print(info) #標準化刪除方式 del info["stu2"] print(info) #另一種刪除方式 info.popitem() #隨機刪除 print(info) #查 info1 = {'stu01': 'aihuidi', 'stu02': 'zhidao','stu03': 'hoade'} value = info1['stu02'] #有就返回值,沒有就報錯 value1 = info1.get('stu06',"沒有") #有就返回對應的值,沒有就返回設定的值''沒有'' print(value) print(value1)
字典的迴圈
#字典的迴圈 dic = {"name": "aihuidi","age":19,"nono":"aiai"} for key in dic: print(key) for item in dic.items(): print(item) for key,value in dic.items(): print(key,value)
其他操作
item = dic.items() print(item,type(item)) # dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'> # 這個類型就是dict_items類型,可迭代的 keys = dic.keys() print(keys,type(keys)) # dict_keys(['sex', 'age', 'name']) <class 'dict_keys'> values = dic.values() print(values,type(values)) # dict_values(['male', 18, 'jin']) <class 'dict_values'> #同上
輸出結果如下:
2.6、集合(set)
集合是無序的,不重覆的數據集合,它裡面的元素是可哈希的(不可變類型),但是集合本身是不可哈希(所以集合做不了字典的鍵)的。
以下是集合最重要的兩點:
- 去重,把一個列表變成集合,就自動去重了
- 關係測試,測試兩組數據之前的交集、差集、並集等關係
#set 集合 set1 = set({1,2,'barry'}) set2 = set({1,2,'barry'}) print(set1,set2) #結果:{1, 2, 'barry'} {1, 2, 'barry'} #增 set1 = {'aihuidi','hhhh','work','ordinary'} print(set1) #結果:{'work', 'aihuidi', 'hhhh', 'ordinary'} set1.add('self-discipline') print(set1) #結果:{'work', 'aihuidi', 'hhhh', 'ordinary', 'self-discipline'} #update:迭代的增加 set1.update('strong') print(set1) #結果:{'aihuidi', 'g', 'r', 'o', 'n', 't', 'work', 's', 'hhhh', 'ordinary', 'self-discipline'} set1.update('nonoea') print(set1) #結果:{'aihuidi', 'g', 'a', 'r', 'o', 'n', 't', 'work', 'e', 's', 'hhhh', 'ordinary', 'self-discipline'} #集合的刪 set1 = {'aihuidi','hhhh','work','ordinary'} set1.remove('work') print(set1) #結果:{'ordinary', 'hhhh', 'aihuidi'} set1.pop() #隨機刪除 print(set1) #結果: #因是隨機的所以產生的結果不一樣
集合的其他操作
交集
#交集(&或者intersection) set1 = {1,3,5,7,9} set2 = {1,4,3,8,10} print(set1 & set2) #兩個集合里都有1和3{1,3} #結果:{1, 3}
並集
#並集(\ 或者 union) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) #結果:{1, 2, 3, 4, 5, 6, 7, 8} print(set2.union(set1)) #結果:{1, 2, 3, 4, 5, 6, 7, 8}
差集
#差集(- 或者 difference) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) #結果:{1, 2, 3} print(set2 - set1) #結果:{8, 6, 7} print(set1.difference(set2)) #結果:{1, 2, 3} print(set2.difference(set1)) #結果:{8, 6, 7}
反交集
#反交集 (^ 或者 symmetric_difference) set1 = {1,2,3,4,5,10} set2 = {4,5,6,7,8} print(set1 ^ set2) #兩個集合里都有{4,5} #結果:{1, 2, 3, 6, 7, 8, 10} print(set1.symmetric_difference(set2)) #結果:{1, 2, 3, 6, 7, 8, 10}
子集與超集
#子集和超集 set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) #結果:True print(set1.issubset(set2)) #這兩個相同,都是說明set1是set2子集 #結果:True print(set2 > set1) #結果:True print(set2.issubset(set1)) #這兩個相同,都是說明set2是set1超集 #結果:False
frozenset不可變集合,讓集合變化不可類型
#frozenset不可變集合,讓集合變化不可類型 s = frozenset('abcde') print(s,type(s)) #結果:frozenset({'d', 'a', 'e', 'b', 'c'}) <class 'frozenset'>
基礎數據類型的總結
按存儲空間的占用分(從低到高)
數字
字元串
集合:無序,即無序存索引相關信息
元組:有序,需要存索引相關信息,不可變
列表:有序,需要存索引相關信息,可變,需要處理數據的增刪改
字典:無序,需要存key與value映射的相關信息,可變,需要處理數據的增刪改
按存值個數區分
標量/原子類型 | 數字,字元串 |
容器類型 | 列表,元組,字典 |
按可變不可變區分
可變 | 列表,字典 |
不可變 | 數字,字元串,元組,布爾值 |
按訪問順序區分
直接訪問 | 數字 |
順序訪問(序列類型) | 字元串,列表,元組 |
key值訪問(映射類型) | 字典 |
2.7、其他(for、enumearte、range)
for迴圈:用戶按照順序迴圈可迭代對象的內容msg = '愛輝弟要加油學習python哦'
msg = '愛輝弟要加油學習python哦'
for item in msg: print(item)
#結果:
愛
輝
弟
要
加
油
學
習
p
y
t
h
o
n
哦
li = ['aihuidi','hhhh','sache','delte']
for i in li:
print(i)
#結果:
# aihuidi
# hhhh
# sache
# delte
dic = {'name':'aihuidi','age':19,'sex':'man'}
for k,v in dic.items():
print(k,v)
#結果:
# sex man
# name aihuidi
# age 19
enumerae:枚舉,對於一個可迭代的(iterable)/可遍歷的對象(如:列表、字元串),
enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。
kk = ['aihuidi','無敵','廠子','專業'] for i in enumerate(kk): print(i) #結果: # (0, 'aihuidi') # (1, '無敵') # (2, '廠子') # (3, '專業') for index,name in enumerate(kk,1): print(index,name) #結果: # 1 aihuidi # 2 無敵 # 3 廠子 # 4 專業 for index, name in enumerate(kk, 100): #起始位置預設是0,也可根據場景進行更改 print(index, name) #結果: # 100 aihuidi # 101 無敵 # 102 廠子 # 103 專業
range:指定範圍內,生成指定數字
for i in range(1,10): print(i) #結果: # 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 for i in range(1,10,2): #步長 print(i) #結果: # 1 # 3 # 5 # 7 # 9 for i in range(10,1,-2): #反向步長 print(i) #結果: # 8 # 6 # 4 # 2