day1-6 字串、列表、元組、字典、型別轉換
阿新 • • 發佈:2018-11-17
day1
1、python歷史。
巨集觀上:python2 與 python3 區別:
python2 原始碼不標準,混亂,重複程式碼太多,
python3 統一 標準,去除重複程式碼。
2、python的環境。
編譯型:一次性將所有程式編譯成二進位制檔案。
缺點:開發效率低,不能跨平臺。
優點:執行速度快。
:C,C++等等。
解釋型:當程式執行時,一行一行的解釋。
優點:開發效率高,可以跨平臺。
缺點:執行速度慢。
:python ,php,等等。
3、break:跳出迴圈 continue:到迴圈首
day2
1、編碼
1bit 8bit = 1bytes
1byte 1024byte = 1KB
1KB 1024kb = 1MB
1MB 1024MB = 1GB
1GB 1024GB = 1TB
最初是由美國人發明的ascii碼,為密碼本,後來發明了萬國碼“unicode”,可是代表漢子要佔用4個位元組,太大了;
所以發明了utf-8、utf-16、utf-32,一個字元24為,3位元組
utf-8:最少用一個位元組,8位表示一個英文;
歐洲16位,兩個位元組
亞洲24位,3個位元組
中國人發明了gbk,一箇中文16位去表示,2個位元組
GBK:基於ascii研發的,只能支援中文和英文,不能喝utf-8直接轉換
2、邏輯運算:And、or、not
- 優先順序:( )>not>and>or
- int ——> bool 非零的轉換成bool為True 0轉換為bool是False
- bool ——> int True=1 False=0
- print(x or y) x 為 True時(非零為True),返回x 否則返回y
- print(x and y) x 為 True時 返回y 湊則返回x
- print(1 or 2 and 3 or 1 > 2 and 5 ) 找找類似這樣的規律 “我感覺看到or就行”
day3
1、int
- *.bit_length() //求數字轉換為二進位制最小長度
2、轉換
1 # bool True False 2 # int ——> str3 i = 1 4 s = str(i) 5 # str ——> int //只有數字可以轉換 6 s = '123' 7 i = int(s) 8 # int ——> bool //非零就是True,0位False 9 i = 3 10 b = bool(i) 11 # bool ——> int // True = 1, False = 0 12 ''' ps: 13 while True: 14 pass 15 while 1: # 效率高 16 pass 17 ''' 18 19 # str ——> bool //字串位空 = False,非空為True
3、str
1 # 索引和切片 2 s = "ABCDESDASDEG" 3 4 s1 = s[0] # 取出第一個字母(A) 5 s2 = s[2] # 取出第三個字母(B) 6 s3 = s[-1] # 取出倒數第一位(G) 7 s4 = s[-2] # 取出倒數第二位(E) 8 # 切片:顧首不顧尾 9 10 s5 = s[0:3] # 取出ABC 11 s6 = s[0:-1] # 取出第一個到倒數第二個(ABCDESDASDE) 12 s7 = s[0:] # 取出全部 13 s8 = s[:] # 取出全部 14 # 跳著取[首:尾:步長] 15 16 s9 = s[0:5:2] # 第0個索引盜第5個索引,跳兩個取(ACE) 17 18 # 倒著取 19 20 s10 = s[3::-1] # 取 DCBA 21 s11 = s[-1::-1] # 逆序取全部 22 s12 = s[::-1] # 逆序取全部 23 24 # 字串操作 25 s = 'alex.egon.wusir' 26 s1 = s.title() # 以字元和數字隔開的,其後的字母大寫 返回(Alex Egon Wusir) 27 28 s = 'alexWUsir' 29 # 更改大小寫 30 s1 = s.capitalize() # 首字母大寫,其它大寫的也變成小寫 31 s1 = s.upper() # 全部變成大寫 32 s1 = s.lower() # 全部小寫 33 s1 = s.swapcase() # 大小寫翻轉 34 # 居中和製表符 35 s1 = s.center(20, "#") # 設定一個20的長度,讓字串居中,預設用空格填充兩邊,可以使用其他符號,如"#"號 36 s1 = s.expandtabs() # 如果字串中有“\t”則,在前邊的封8進行補位 37 # 字串的判斷 38 s1 = s.startswith("al") # 如果是以什麼開頭,是返回True 39 s1 = s.startswith("e", 2) # 從第二個字元到最後是不是以”e“開頭,是返回True 40 # 字串的查詢 41 s1 = s.find("W") # 查詢字串中是否有某個元素,有的話返回索引;沒有返回-1 42 s1 = s.find("U", ) # 從第二個開始進行查詢,如果找到返回索引,找不到返回-1 43 s1 = s.index("U") # 尋找元素,找到返回索引,找不到報錯 44 # 刪除空格 45 s1 = s.strip() # 去除前後的空格 46 s1 = s.strip("@#$") # 刪除字串中的前後@#$,不論順序 47 s1 = s.rstrip() # 刪除右側 48 s1 = s.lstrip() # 刪除左側 49 # 統計個數 50 s1 = s.count("a") # 計數字符串中有幾個a 51 # 分割 str ——> list 52 s1 = s.split() # 以空格分割為列表 53 # 公共方法,字典、列表、元組都可以用的 54 len(s) # 測量總共有幾個元素 55 # 格式化輸入 56 s1 = "我叫{},今年{},愛好{},再說一次我叫{}".format('太白', 20, 'women', '太白') 57 s1 = "我叫{0},今年{1},愛好{2},再說一次我叫{0}".format('太白', 20, 'women') 58 59 # 替換 60 s = '我的敬愛傻傻的啥大事傻傻卡號' 61 s1 = s.replace("傻傻", '聰明') # 替換全部 62 s1 = s.replace("傻傻", '聰明', 1) # 替換全部第一個 63 64 # is系列 65 s = "asdla131" 66 s1 = s.isalnum() # 是不是由字母或者數字組成 67 s1 = s.isalpha() # 是不是由字母組成 68 s1 = s.isdigit() # 是不是由數字組成View Code
day4
1、list
1 li = ["alex", [1, 2, 3], "wusir", "egon", "女神"] 2 # l1 = li[0] 3 # l2 = li[1] 4 5 # 增 6 # 1、增加:list.append //預設增加到最後 7 # li.append("日天") 8 # li.append(2) 9 # 持續新增,想退出按q or Q 10 # while 1: 11 # name = input(">>>") 12 # if name.lower().strip() == "q": 13 # break 14 # else: 15 # li.append(name.strip()) 16 # 2、新增list.extent //增加都最後 17 # li.extend("123") 18 # li.extend([1, 2, 3]) 19 # 3、插入:list.insert //按照索引插入 20 # li.insert(4, "大灰") 21 22 # 刪 23 # 1、li.pop //按照索引去刪除,返回值為刪除的元素,為空預設刪除最後一個 24 # print(li.pop()) 25 # 2、li.remove //按照元素刪除,元素必須存在,否則報錯 26 # li.remove("egon") 27 # 3、li.clear //刪除所有元素 28 # li.clear() 29 # del //刪除列表,也可以切片刪除 30 # del li 31 # del li[0:2] 32 33 # 改 34 # 1、直接改索引的值 35 # li[0] = 'hello' 36 # 2、切片改,選擇切片範圍,可以隨便改,可大於範圍,可小於範圍 37 # li[0:1] = "牛牛牛" 38 # li[0:2] = [1, "asd", '你好', [1, 2]] 39 40 # 查 41 # 1、迴圈 42 # for i in li: 43 # print(i) 44 # 2、切片 45 # print(li[0:3]) 46 47 # 公共方法 48 # print(len(li)) 49 # print(li.count('egon')) 50 # print(li.index("wusir")) 51 52 53 li = [1, 64, 95, 55, 123] 54 55 # li.sort() # 正向排序 56 # li.sort(reverse=True) # 倒序排序 57 # li.reverse() # 反轉 58 print(li)list的增刪改查
2、list巢狀
1 li = ['taibao', '武藤蘭', '苑昊', ['alex', 'egon', 89], 23] 2 # print(li[1][1]) # 找到'藤' 3 li[0] = li[0].capitalize() # ‘taibai’的首字母大寫 4 li[2] = li[2].replace("昊", '日天')
3、元祖
1 # tu = (1, 2, 3, ['mrxuan', 'qwer', 'zxcvb'], 'egon') 2 # tu[3][3] = tu[3][3].upper() 3 # tu[3].append("Q") 4 # print(tu)
4、字串和列表的轉換以及join的方法運用
1 # 列表 --> str join 2 s = "-".join(["ni", 'hao', 'ya']) 3 print(s) 4 # 字串轉換為列表 5 li = '我 你 他 哈 her new'.split() 6 print(li)
5、range的用法
1 # range 2 3 for i in range(0, 10): 4 print(i) 5 for i in range(10, 0, -2): 6 print(i)
day5
1 # dict 2 """ 3 資料型別劃分:可變資料型別,不可變資料型別 4 不可變資料型別:元組,bool,int,str 可雜湊 5 可變資料型別:list,dict,set 不可雜湊 6 dict key:必須是不可變資料型別 可雜湊 7 dict value:任意資料型別 8 9 dict 優點: 10 二分查詢 11 儲存大量的關係資料 12 特點: 13 無序的 14 """ 15 16 # dic = { 17 # 'name': ['大猛', '小孟'], 18 # 'py9': [{'num': 71, 'avg_age': 18}], 19 # True: 1, 20 # (1, 2, 3): 'wuyiyi', 21 # 2: '二哥' 22 # } 23 24 # dic1 = {'age': 18, 'name': 'jin', 'sex': 'male'} 25 26 # 增 27 # 1、 索引修改 28 # dic1['high'] = 185 # 沒有鍵值對,新增 29 # dic1['age'] = 16 # 如果有建,則值覆蓋 30 # 2、setdefault 鍵值對有的話,不做任何改變,沒有則新增 31 # dic1.setdefault('weight', 130) 32 33 # 刪 34 # 1、pop 返回key的value 35 # print(dic1.pop('name')) 36 # 如果沒有則會報錯; 可以在逗號後邊新增一個引數,則不會報錯 37 # dic1.pop('aa') 38 # dic1.pop('aa', None) # None可以自定義寫其他的,設定的引數將會成為pop的返回值 39 # dic1.popitem() # 隨機刪除一個鍵值,返回一個刪除鍵值元組 40 # del dic1['name'] # 刪除 41 # del dic1 # 刪除字典 42 43 # 改 44 # dic1 = {'age': 18, 'name': 'jin', 'sex': 'male'} 45 # dic = {'age': 18, 'name': 'alex', 'sex': 'male'} 46 # dic1.update(dic) # 將dic的字典更新到dic1,有的話覆蓋,沒有則增加 47 48 # 查 49 # print(dic1.keys()) # 所有的key 50 # print(dic1.values()) # 所有的value 51 # print(dic1.items()) # 所有字典的鍵值 52 # for i in dic1: 53 # print(i) 54 # for i in dic1.keys(): 55 # print(i) 56 # for i in dic1.values(): 57 # print(i) 58 # for k, v in dic1.items(): 59 # print(k, v) 60 # print(dic1['name']) 61 # print(dic1['name1']) # 報錯 62 # print(dic1.get('name1')) # 不報錯 63 # print(dic1.get('name1', '沒有這個鍵')) # 果果沒有key則會返回後邊的str 64 # dic1.clear() # 清空字典 65 66 # print(dic1)dict的增刪改查
小知識彙總
# = 賦值 == 比較 is 比較記憶體地址 id(內容):輸出記憶體地址
# 數字, 字串 定於小資料池,節省記憶體空間
# 數字的範圍:-5 -- 256之間的數字 會開闢一個記憶體空間
# 字串:
- 不含有特殊字元
- s * 20 還是同一個地址,s * 21 以後都是兩個,s為一個字元
編碼:
ASCII
A:00000010 8位 一個位元組
unicode
A:00000000 00000001 00000010 00000100 32 位 四個位元組
中:00000000 00000001 00000010 00000100 32 位 四個位元組
utf-8
A: 0010 0000 8位 1個位元組
中: 00000001 00000010 00000100 24 位 三個位元組
gbk
A: 00000110 8位 一個位元組
中: 00000010 00000110 16位 兩個位元組
1、個個編碼之間的二進位制,是不能互相識別的,會產生亂碼。
2、檔案的儲存、傳輸,不能使unicode(只能是ytf-8 utf-16 gbk gbk2313 ASCII)等
python3:
str 在記憶體中是用unicode編碼。
bytes型別:
對於英文:
str : 表現形式:s = "alex"
編碼方式:010101010 unicode
bytes: 變現形式:s = b"alex" b代表bytes型別
編碼方式:000101010 utf-8 gbk.....
對於中文:
str : 表現形式:s = "中國"
編碼方式:010101010 unicode
1 s = 'alex'
2 s1 = b'alex'
3 print(s,type(s))
4 print(s1,type(s1))
bytes: 變現形式:s = b"x\e91\e91\e91\e01\e21\e31\e32" b代表bytes型別
編碼方式:000101010 utf-8 gbk.....
1 s = '中國'
2 s1 = b'中國'
3 print(s,type(s))
4 print(s1,type(s1))
1 s1 = "alex"
2 # encode 編碼, str ——> bytes
3 s2 = s1.encode('utf-8')
4 s2 = s1.encode('gbk')
5 s10 = "中國"
6 s11 = s10.encode('utf-8')
7 s11 = s10.encode('gbk')