一,複習: 二,數據類型的相互轉換 三,字元編碼: ...
一,複習:
''' 1,深淺拷貝
ls = [1,'a',[10]]
值拷貝:直接賦值 ls1 = ls,ls中的任何值發生改變,ls1也隨之發生改變
淺拷貝:通過copy()方法 ls2 = ls.copy(),ls中存放的值的地址沒有改變, 但內部的值發生改變,ls2會隨之改變
-- ls = [1, 'a', [10]] => [1, 'a', [100]] = ls2
深拷貝:通過deepcopy()方法 ls3 = deepcopy(ls),ls中存放的值發生任何改變,ls3都不會隨之改變
2.元組類型
t = tuple()
元組:
1.就可以理解為不可變的list
2.有序 - 可以索引取值,可以切片
3.不可變 - 長度和內容都不能發生改變
細節:元組中可以存放所有的數據類型,所以存放可變類型數據後,可變類型依然可以發生改變
3.字典類型
d1 = {}
d2 = dict({'a': 1})
d3 = dict(name='Bob') # 所有的key都會用合法的變數名,最終轉化為字元串類型的key
d4 = {}.fromkeys('abc', 0) => {'a': 0, 'b': 0, 'c': 0}
key: 要確保唯一性,所以必須為不可變類型
value:存放可以存放的所有類型數據,所以支持所有類型
字典:1.可變 2.沒有索引,通過key取值 3.無序的
增刪改查:字典名[key名] | 字典名[key名] = 值 | update(dict) | setdefault(key, d_value) | get(key, default)
| pop(key) | popitem() | clear()
迴圈:keys() | values() | items()
for k, v in dic.items(): # (k, v)
pass
字典的成員運算:完成的就是 key 在不在 目標字典中
4.集合類型
s = set()
集合:1.可變 - 可增可刪 2.無序無索引無key - 不能取值不能改值 3.for可以對集合取值,取值的結果順序不確定
特定:不能存放重覆的數據(去重效果)
# s1.symmetric_difference_update(s2) # 將集合s1與s2的運算結果設置給s1
'''
二,數據類型的相互轉換
''' 1,哪些類型可以轉化為數字 res = int('10')
print(res)
res = int('-3')
print(res)
res = float('.15')
print(res)
res = float('-.15')
print(res)
res = float('-3.15')
print(res)
2,數字轉化字元串
print(str(10))
3,字元串與列表相互轉換*****
s = 'abc123呵呵'
print(list(s)) #['a', 'b', 'c', '1', '2', '3', '呵', '呵'] 沒有對應的 str(ls)
ls = ['a', 'b', 'c', '1', '2', '3', '呵', '呵']
n_s = ''.join(ls)
print(n_s) #abc123呵呵
s1 = 'a b c 1 2 3 呵 呵'
res = s1.split() #預設按空格拆分
print(res) #['a', 'b', 'c', '1', '2', '3', '呵', '呵']
#必須掌握*****
列表與字元串相互轉換*****
s2 = 'ie=UTF-8&wd=你好帥'
res = s2.split('&')
print(res) # ['ie=UTF-8', 'wd=你好帥']
ls2 = ['ie=UTF-8','wd=你好帥']
n_s2 = '@'.join(ls2)
print(n_s2) # ie=UTF-8@wd=你好帥
4,需求: 字元串與列表的相互轉換: "ie=UTF-8&wd=你好帥" => [('ie', 'UTF-8'), ('wd', '你好帥')]
res = []
s4 = "ie=UTF-8&wd=你好帥"
ls4 = s4.split('&') # ['ie=UTF-8', 'wd=你好帥']
for ele in ls4: # v = ie=UTF-8 | wd=你好帥
k,v = ele.split('=') # k: ie v: UTF-8
res.append((k,v))
print(res) #[('ie', 'UTF-8'), ('wd', '你好帥')]
5,需求:字元串與字典的相互轉換: "ie=UTF-8&wd=你好帥" => {'ie': 'UTF-8', 'wd': '你好帥'}
res = {}
s5 = "ie=UTF-8&wd=你好帥"
ls5 = s5.split('&') # ['ie=UTF-8', 'wd=你好帥']
for ele in ls5:
k,v = ele.split('=') #k:ie v=UTF-8
res[k] = v
print(res) #{'ie': 'UTF-8', 'wd': '你好帥'}
6,需求:列表與字典的相互轉換:[('ie', 'UTF-8'), ('wd', '你好帥')] => {'ie': 'UTF-8', 'wd': '你好帥'}
res = {}
ls6 = [('ie', 'UTF-8'), ('wd', '你好帥')]
for k,v in ls6:
res[k] = v
print(res)
7,list 與taple ,set 直接轉換——直接 類型()
8.需求:將漢字轉化為數字
# 將 壹、貳、叄、肆、伍、陸、柒、捌、玖、拾、佰、仟
# 轉化為 1、2、3、4、5、6、7、8、9、10、100、100
## 作業:壹仟捌佰玖拾叄 => 1893
num_map = {
'壹': 1,
'貳': 2,
'仟': 1000
}
ls8 =['貳', '壹', '仟']
res = []
for v in ls8:
num = num_map[v] #通過key去映射拿到對應的值,完成 '貳' => 2
res.append(num)
print(res)
'''
三,字元編碼:
# 測試一下 # 學習字元編碼的問題:解決亂碼問題 # 數據 從 硬碟 => 記憶體 => cpu
# 應用程式打開文本文件的三步驟 # 1.打開應用程式 # 2.將數據載入到記憶體中 # 3.cpu將記憶體中的數據直接翻譯成字元顯示給用戶 # python解釋器 # 1.打開python解釋器 # 2.將數據載入到記憶體中 # 3.cpu將記憶體中的數據解釋執行將結果顯示給用戶,如何解釋執行不能通過,將錯誤信息提供給用戶 # 編碼的發展史 # 電腦只能識別高低電頻對應的0,1信息 => 問題:如何將世間萬物信息存放到記憶體中 # 世間萬物信息 => 0,1形式的數據 => 電腦中存放,將該過程逆向操作,就是訪問已存儲的數據信息 # 編碼表 # 人能識別的字元 <=> 機器能識別的字元:一定存在一種固定的對應關係 # 編碼表:一定範圍內人能識別的字元與機器能識別的字元形成的對應關係表(映射表) # 1.ASCII表:英文字母、英文符號、數字與機器能識別的字元的對應關係表,8個二進位位就能存放完這所有的對應關係 => 1位元組 # python2採用的預設編碼是ASCII,早期並不支持中文編程 # 2_1.GBK:中文與與機器能識別的字元的對應關係表(完全相容ASCII表),16個二進位位能存放所有漢字與ASCII之前的對應關係 => 2個位元組 # 2個位元組能否存放常用漢字 => 16個二進位位 2^15 # print(pow(2, 15)) # 2_2.Shift_JIS | Euc-kr:日文 | 韓文 與機器能識別的字元的對應關係表(完全相容ASCII表) # 亂碼:存的編碼格式與取的編碼格式不一致 # 3.Unicode萬國碼:世間中常用國家的常用字元與機器能識別的字元的對應關係表 # 轉碼:Unicode存在漢字與二進位對應關係,GBK也存在漢字與二進位對應關係,將GBK存放的數據轉存到Unicode數據 # 均採用Unicode編碼表,只是存放數據採用位元組數不一致,utf-8與utf-16是Unicode編碼表的兩種體現方式
# utf-8:以1個位元組存放英文,以3 | 6個位元組存放漢字,在英文數據過多時,更深空間,用來傳輸效率更高 # utf-16:所有支持的符號都採用2個位元組存放,讀存數據採用定長,不用計算,讀存效率高 # 硬碟到記憶體需要數據的傳輸,記憶體到CPU需要數據的傳輸,所有都採用utf-8 # 記憶體需要高速讀寫,採用utf-16 # 學習的結晶:編碼與解碼要統一編碼 # 操作文本字元 res = "漢字呵呵".encode('utf-8') # 編碼:將普通字元串轉化為二進位字元串 print(res) res = b'\xe5\x91\xb5\xe5\x91\xb5'.decode('GBK') # 解碼:將二進位字元串轉化為普通字元串 print(res) res = b'\xe5\x91\xb5\xe5\x91\xb5'.decode('utf-8') print(res)