一 數據基本類型概況
01 int 整形
1,2,3 .... 用於計算,運算。
經常使用方法
i = 4
print(i.bit_length()) ##打印的是二進制的長度
02 str 字符串
python
如:‘老男孩’,‘alex'.... 少許的數據的存儲。
#切片
1 s = 'python自動化21期' 2 # 切片 3 #s[起始索引:結束索引+1:步長] 4 # s1 = s[:6] 5 # print (s1) 6 # 7 # s2 = s[6:9] 8 # print (s2) 9 10 # print(s[0:]) ##默認到最後 11 # 12 # print (s[:-1]) ##-1表明最後一個,可是不打印最後一個 13 # 14 # print (s[0:5:2]) ##每隔1個打印一次 2 就表明步長 15 # print (s[5:0:-2]) ##反向加步長,倒着取值
# * capitalize()首字母大寫,其餘字母小寫 1 # s = 'oldBoy' 2 #s1 = s.capitalize() 3 # print (s1) # *** 所有大寫upper() 所有小寫lower() 2 s2 = s.upper() 3 s3 = s.lower() 4 print (s2,s3) #* 大小寫反轉 swapcase() 1 s4 = s.swapcase() 2 print (s4)
1 #*非字母的元素隔開的每一個單詞首字母大寫 title() 2 3 ss = 'alex wusir*oldboy3taibia' 4 s5 = ss.title() 5 print (s5) 6 7 # center 居中,長度本身設定,默認填充物None 8 s6 = s.center(30,'*') 9 print (s6) 10 11 # *** startswith endswith 以什麼開頭,以什麼結尾 12 s7 = s.startswith('o') 13 print (s7) ##若是是真,則返回true 14 15 s8 = s.endswith('y') 16 print (s8) ##同上
1 # *** strip 去除首尾的空格,製表符\t,換行符。不單單是去除空格.... 2 # rstrip 去除右邊,lstrip 去除左邊 3 4 s = 'tyoyldBoyrte' 5 # 6 # print(s) 7 # s8 = s.strip() 8 # print(s8) 9 # s81 = s.strip('t') 10 # # print(s81) 11 # s81 = s.strip('tey') ##把字符串裏面的tey給去掉了,從左往右依次執行 12 # print(s81) 13 14 #例子: 15 # name = input('>>>').strip() ##輸入用戶名的時候自動去除空格,能夠防止用戶輸錯 16 # if name == 'oldboy': 17 # print('驗證成功')
1 #*** split (str ---> list) 2 3 # s1 = 'oldboy,wusir,alex' 4 # b = 'oldboywusiroalex' 5 # l = b.split() 6 # print(l) 7 # l = s1.split(',') ##以逗號爲分隔符,讓s1變成了列表 8 # print(l) 9 # l2 = b.split('o') # ['', 'ldb', 'ywusir', 'alex']b 10 # print(l2) 11 # 12 # l3 = b.split('o',1) # ['', 'ldboywusiroalex'] 13 # print(l3) 14 15 16 #join 將list --->str 17 sa = 'oldBoy' 18 s9 = '+'.join(sa) ##用‘+’號把字符串鏈接起來 19 print(s9) 20 l1 = ['oldboy','wusir','alex'] 21 s91 = '_'.join(l1) ##用'_'把字符串鏈接起來 22 print(s91)
1 # #replace 替換 2 h = '咱們都是好孩子' 3 h1 = h.replace('我','你') 4 print(h1) 5 6 #find 經過元素找索引 找不到返回-1 7 # index 經過元素找索引 找不到報錯 8 9 u = 'odlabced' 10 u1 = u.find('g') 11 print(u1) 12 13 # u2 = u.index('g') 14 # print (u2) 15 16 ##字符串格式化輸出format 17 # res='我叫{}今年{}歲,愛好{}'.format('egon',18,'male') 18 # print(res) 19 res='我叫{0}今年{1}歲,愛好{2},我依然叫{0}'.format('egon',18,'male') 20 print(res) 21 # res='{name} {age} {sex}'.format(sex='male', name='egon', age=18) 22 # print(res)
1 #公共方法 2 #len count 3 n = 'dfdfdfdfsdfsf' 4 n1=len(n) 5 print (n1) ##返回字符串的長度 6 n2 = n.count('d') ##統計字母d出現了幾回 7 print (n2) 8 9 ##判斷字符串的類型 10 name = 'jinxin989' 11 print (name.isalnum()) ## 判段字符串由字母或數字組成 12 print (name.isdigit()) ##是否只有字母 13 print (name.isalpha()) ##是否只有數字 14 #例子 15 i = '123a' 16 if i.isdigit(): 17 i = int(i) 18 else: 19 print("輸入有誤...")
03 bool:True,False.git
04 list:儲存大量的數據
[True,1,'alex',{'name':'oldboy'},[1,2,3],(2,3,4),{'wusir'}]
一,索引,切片。api
1 l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian'] 2 # #增 3 # #append 在組後增長 4 # l.append('葫蘆') 5 # print (l) 6 # 7 # #insert插入 8 # 9 # l.insert(1,'bob') ##在索引是1的地方插入 10 # print (l) 11 # 12 # #迭代添加 13 # 14 # l.extend('alex') 15 # print (l)
1 # #刪除 2 # #pop 有返回值,按照索引刪除 3 # 4 # print (l.pop(0)) 5 # print (l) 6 # #remove 7 # l.remove('alex') 8 # print (l) 9 # 10 # #clear 清空列表 11 # # l.clear() 12 # # print (l) 13 # 14 # #del 內存級別刪除列表 15 # 16 # # del l 17 # # print (l) 18 # 19 # #按索引刪除 20 # # del l[1] 21 # # print(l) 22 # 23 # #切片刪除 24 # 25 # del l[1:3] 26 # print (l)
1 #改 2 #按照索引去改 3 # print (l[2]) 4 # l[2]= 'huningfei' 5 # print (l) 6 # #按照切片去改 7 # l[:2] = 'abc' ##把索引是0和1的所有改爲了abc 8 # print (l) 9 # l[1:3] = [111,222,333] 10 # print (l)
1 # #查詢 2 # #按照索引去查詢,按照切片去查下 3 # for i in l: 4 # print (i) 5 #
1 # #其餘辦法 2 # 3 a = [8,7,8,3,3,5,3,1,2] 4 # #count 計數 5 # print (a.count(8)) 6 # 7 # #len 8 # print (len(a)) 9 # 10 # #sort 從小到大排序 11 a.sort() 12 print (a) 13 a.sort(reverse=True) ##從大到小 14 print (a) 15 b = ['a','b','e','e','g'] 16 #reverse ##倒過來排序 17 b.reverse() 18 print (b)
獲取列表的下標及索引app
name = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3']ide
name.index('Amy')測試
05 tuple 元組 只讀列表
(True,1,'alex',{'name':'oldboy'},[1,2,3],(2,3,4),{'wusir'})spa
屬性:3d
1 tu = (11,2,True,[2,3,4],'alex') 2 #查找 3 for i in tu: 4 print (i) 5 6 #切片 7 print (tu[1]) 8 print (tu[:3:2]) 9 10 print(tu.index(True)) 11 #count 統計 12 print(tu.count(2)) 13 #len長度 14 print(len(tu)) 15 #添加 16 tu[-2].append('99') 17 print (tu)
06 dict字典:大量的數據,關聯型數據。查詢速度很是快,符合二分查找。code
'''
字典的key是惟一的。key 必須是不可變的數據類型。
key:不可變的數據類型(可哈希):str,bool,tuple,int。
value:任意數據類型。
數據類型分類:
不可變的數據類型(可哈希):str,bool,tuple,int
可變的數據類型:dict,list,set。
容器類數據類型:list,tuple,dict,set.
字典:存儲數據多,關係型數據,查詢速度快(二分查找)。
3.6版本以前,字典是無序的,3.6以後字典是有序的。orm
{'name':'oldboy','age':45,'name_list':['張三'....]}
1 dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', } 2 # 3 # #增長 4 # 5 # dic ['high'] = 180 ##有則覆蓋,無則添加 6 # print (dic) 7 # dic ['name'] = 'ritian' 8 # print (dic) 9 # 10 # dic.setdefault('high',170) ##有則不變,無責添加 11 # print (dic) 12 # dic.setdefault('sex','nan') 13 # print (dic) 14 #
1 # #刪除 2 # print (dic.pop('name')) 3 # print (dic.pop('name1','沒有辭職,sb')) 4 # 5 # # dic.clear() #清空 6 # # print (dic) 7 # 8 # print (dic.popitem()) #隨機刪除,返回值
1 # #改 2 # dic['name'] = 'laonanhai' 3 # print (dic) 4 # 5 # dic2 = {'name':'alex','weight':75} 6 # dic2.update(dic) 7 # print (dic) 8 # print (dic2)
1 #查 2 3 # print (dic['name']) 4 # print (dic.get('name')) 5 # print (dic.get('name1','沒有此鍵值')) 6 7 8 # #keys() values() items() 9 # print (list(dic.keys())) ##能夠取出鍵值,變成列表 10 # for i in dic.keys(): ##能夠循環打印鍵值 11 # print (i) 12 # 13 # 14 # print (list(dic.values())) ##只能取出values 15 # for i in dic.values(): 16 # print (i) 17 # 18 # print (list(dic.items())) ##能夠同時取出鍵值和values 19 # for i in dic.items(): 20 # print (i)
1 ##其餘類型 2 #分別賦值 3 a,b = 1,2 4 print (a,b) 5 a = 1 6 b = 5 7 print (a,b) 8 9 for k,v in dic.items(): 10 print (k,v) 11 12 #len 長度 13 14 print (len(dic)) 15 16 ##fromkeys 建立一個新字典 17 18 dic1 = dict.fromkeys('abc', '張三') 19 print (dic1) 20 21 #打印結果 {'a': '張三', 'b': '張三', 'c': '張三'} 22 dic3 = dict.fromkeys('abc',[10]) 23 print (dic3) 24 25 dic3['a'].append('oldboy') 26 print (dic3) 27 #打印結果 {'a': ['oldboy'], 'b': ['oldboy'], 'c': ['oldboy']}
07 set集合:關係型數據的交集,並集,差集,子集.... 列表的去重。
'''
集合:
無序,不重複的數據類型。它裏面的元素必須是可哈希的。可是集合自己是不可哈希的。
1:關係測試。交集並集,子集,差集....
2,去重。(列表的去重)
'''
set1 = {'alex','wusir','ritian','egon','barry'}
1 ##去除重複
2 l1 = [1,1,2,2,3,3,4,5,6,6]
3 l2 = list(set(l1))
4 print(l2)
1 #增 2 set1 = {'alex','wusir','ritian','egon','barry'} 3 4 set1.add('999') 5 print (set1) 6 7 set1.update('abc') 8 print (set1) 9 10 #打印結果是'alex', 'ritian', 'b', '999', 'a', 'c', 'egon', 'barry', 'wusir'}
1 #刪 2 #remove 3 set1.remove('egon') 4 print (set1) 5 6 # #pop 7 # set1.pop() ##隨機刪除不能指定 8 # print (set1) 9 10 #clear 11 set1.clear() 12 print (set1) 13 14 # del set1 # 刪除集合 15 # print(set1)
集合:
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 4 #交集 & intersectio 5 # print(set1 & set2) 6 # print(set1.intersection(set2)) 7 8 #並集 | union 9 # print(set1 | set2) 10 # print(set1.union(set2)) 11 12 #差集 - difference 13 # print(set1 - set2) 14 # print(set1.difference(set2)) 15 16 #反交集 ^ symmetric_difference 就是打印雙方都沒有的元素 17 # print(set1 ^ set2) 18 # print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8} 19 # set1 = {1,2,3} 20 # set2 = {1,2,3,4,5,6}
其餘
1 set4 = {1,2,3} 2 set5 = {1,2,3,4,5,6} 3 4 print (set4 < set5) ##返會true 說明set1是set2子集。 5 print(set4.issubset(set5)) 6 7 print(set5 > set4) 8 9 #frozenset 返回一個凍結的集合,凍結後集合不能再添加或刪除任何元素。 10 s = frozenset('barry') 11 s1 = frozenset({4,5,6,7,8}) 12 print(s,type(s)) 13 print(s1,type(s1))
二 一些數據類型要注意的地方
#再循環一個列表時,不要對列表進行刪除的動做(改變列表元素的個數動做),會出錯
1 #再循環一個列表時,不要對列表進行刪除的動做(改變列表元素的個數動做),會出錯 2 l1 = ['alex', 'wusir', 'taibai', 'barry', '老男孩'] 3 #1 4 # del l1[1::2] 5 # print(l1) 6 # 7 # for i in range(len(l1)): 8 # print(l1) # ['alex', 'wusir', 'taibai', 'barry', '老男孩'] 9 # # ['alex', 'wusir', 'taibai', 'barry', '老男孩'] 10 # # ['alex', 'taibai', 'barry', '老男孩'] 11 # # ['alex', 'taibai', 'barry', '老男孩'] 12 # print(i) # 0 1 2 3 13 # if i % 2 == 1: 14 # del l1[i] 15 # print(l1) # ['alex', 'wusir', 'taibai', 'barry', '老男孩'] 16 # # ['alex', 'taibai', 'barry', '老男孩'] 17 # # ['alex', 'taibai', 'barry'] 18 # print(i) # 0 1
# dict 再循環字典時,不要改變字典的大小。
1 # dict 再循環字典時,不要改變字典的大小。 2 # dic = {'k1':'v1','k2':'v2','k3':'v3','r':666} 3 # l1 = [] 4 # for i in dic: 5 # if 'k' in i: 6 # l1.append(i) 7 # # print(l1) 8 # 9 # for i in l1: 10 # del dic[i] 11 # print(dic)
#tu 若是元組裏面只有一個元素而且沒有逗號隔開,那麼他的數據類型與該元素一致。
1 # tu1 = (1) 2 # print(tu1,type(tu1)) 3 # tu2 = ('alex') 4 # print(tu2,type(tu2)) 5 # 6 # tu3 = (['alex',1,2]) 7 # print(tu3,type(tu3))
二 深淺copy和小數據池
1 #淺copy 2 #對於淺copy來講,第一層建立的是新的內存地址,而從第二層開始, 3 # 指向的都是同一個內存地址,因此,對於第二層以及更深的層數來講,保持一致性 4 l1 = [1,2,3] 5 l2 = l1.copy() 6 l1.append(666) 7 print(l1,l2) 8 print(id(l1),id(l2)) 9 10 l1 = [1,2,3,[22,33]] ##這裏由於[22,33]屬於第二層,因此兩個列表都同樣 11 l2 = l1.copy() 12 l1[-1].append(666) 13 print(l1,l2) 14 print(id(l1[-1]),id(l2[-1])) 15 16 #深copy 對於深copy來講,兩個是徹底獨立的,改變任意一個的任何元素(不管多少層),另外一個絕對不改變。 17 import copy 18 l1 = [1,2,3,[22,33]] 19 l2 = copy.deepcopy(l1) 20 l1[-1].append(666) 21 print(l1,l2) 22 print(id(l1[-1]),id(l2[-1]))
1 # id == is 2 a = 'alex' 3 b = 'alex' 4 print(a == b) # 數值 5 print(a is b) # 內存地址 6 print(id(a)) 7 8 #python中 有小數據池的概念。 9 # int -5 ~256 的相同的數全都指向一個內存地址,節省空間。 10 # str:s = 'a' * 20 之內都是同一個內存地址 11 #只要字符串含有非字母元素,那就不是一個內存地址
三 字典和列表互相嵌套的練習
1 a = [{"id":1,"name": "電腦", "price": 1999},{'num': 2, 'price': 10, 'name': '鼠標'}] ##列表套字典 2 for i in a: 3 print(i.get("name"),i.get("price")) 4 print(a[0].get("name"),a[0].get("price"),a[1]["name"],a[1]["price"])#根據索引去獲取鍵值所對應的value 5 6 分別打印爲: 7 電腦 1999 8 鼠標 10 9 10 電腦 1999 鼠標 10 11 電腦 1999 鼠標 10 12 13 有三種取值方式
1 dic = {"k1": {"k2": {"k3": "v3"}}} ##字典套字典 2 print(dic["k1"]["k2"]["k3"]) ##取出k3的值 3 4 打印結果爲:v3 5 6 a = ["age",{"name":"huningfei"},["aa",'b','c']] ##列表套字典和列表 7 print(a[1].get("name")) ##獲取name的key 8 print ((a[2][1])) ##取出最後一個列表裏面的b值 9 打印結果分別爲 10 11 huningfei 12 b 13 14 b = {"a":"1","c":"23","d":["1","2","3"]} ##字典套列表 15 print (b.get("d")) ##取出d的key 16 print(b.get("d")[1]) ##單獨取出d的一個值 17 打印結果分別爲: 18 ['1', '2', '3'] 19 2
四 字符串和列表之間的相互轉換
1 ##列表轉換字符串 2 name = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3'] 3 b = ','.join(name) 4 print(b,type(b)) 5 6 7 字符串轉換列表 8 a='hu,ning,fei ' 9 print(a.split())
五 列表和字典之間的相互轉換
1 #列表轉字典 2 1#兩個列表轉字典 3 list1 = ['key1','key2','key3'] 4 list2 = ['1','2','3'] 5 print(dict(zip(list1,list2))) 6 #打印結果 {'key1': '1', 'key2': '2', 'key3': '3'} 7 8 1#嵌套列表轉字典 9 list3 = [['key1','value1'],['key2','value2'],['key3','value3']] 10 print(dict(list3)) 11 #打印結果 {'key1': 'value1', 'key3': 'value3', 'key2': 'value2'} 12 13 ##字典轉列表 14 new_list=[] 15 dic={'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} 16 for i in dic.items(): 17 new_list.append(i) 18 print(new_list) 19 print(new_list[0][1]) ##取出列表裏指定的值 20 #打印結果 [('key1', 'value1'), ('key3', 'value3'), ('key2', 'value2')]