Python学习(四) —— 编码
一、枚舉
enumerate,for i in enumerate(可迭代對象),返回元組,內容是(序列號,可迭代的每一個元素)
? ? ? ?for i,j in enumerate(可迭代對象,開始序列號),返回序列號,可迭代的每一個元素
a = 'abc' b = {'a':1,'b':2} for i in enumerate(a):print(i) #輸出: #(0, 'a') #(1, 'b') #(2, 'c')for i,j in enumerate(a,1):print(i,j) #輸出: #1 a #2 b #3 c?
二、內存地址:id()
==比較的是值,is 比較的是內存地址
小數據池:int:-5~256
str:1.不能有空格
? ? 2.長度不能超過20
? ??3.不能有特殊字符
a = [] b = [] print(a == b,a is b) #True False a = 'abc' b = 'abc' print(a == b,a is b) #True True a = '-6' b = '-6' print(a == b,a is b) #True False?
三、編碼
在python3中,str的表現形式為字符串,bytes的表現形式為b字符串,str的實際編碼方式是unicode,bytes的編碼方式是utf-8、gbk、gb2312...
在python3中,unicode:1個字符(無論中文、英文、數字),都用4個字節表示
? utf-8:用最少的字節表示一個字符,英文占1個字節,歐洲文字占2個字節,亞洲文字占3個字節
? gbk:英文占1個字節,中文占2個字節
在python3中,字符串存在內存中是unicode編碼方式,不能直接傳輸或者存儲在硬盤,要轉成bytes類型,unicode轉bytes:a.endode('編碼方式'),bytes轉unicode:a.decode('編碼方式')
? utf-8和gbk、gb2312等編碼方式互不識別,如果要轉化,要先解碼(decode)成unicode方式,再編碼(encode)成對應的方式。
a = 'abc' b = a.encode('utf-8') print(b,type(b)) #b'abc' <class 'bytes'> a = '你好' b = a.encode('utf-8') print(b,type(b)) #b'\xe4\xbd\xa0\xe5\xa5\xbd' <class 'bytes'> c = b.decode() print(c,type(c)) #你好 <class 'str'> d = c.encode('gbk') print(d,type(d)) #b'\xc4\xe3\xba\xc3' <class 'bytes'>?
四、集合(set)
集合用{}表示,集合是無序、不重復的數據集合,它里面的元素是可哈希的(不可變類型),但是集合本身是不可哈希。
特點:去重,把一個列表變成集合,就自動去重了;
? ? 關系測試,測試兩組數據之前的交集、差集、并集等關系;
1、增:add(),update()(迭代著增加)
set1 = {1,2,3} set1.add('abc') print(set1) #{1,2,3,'abc'} set1 = {1,2,3} set1.update('abc') print(set1) #{1,2,3,'a'.'b'.'c'}?
2、刪:remove('元素')、pop():隨機刪除一個元素,并返回這個元素、clear():清空集合
set1 = {1,2,3,'a','b','c'} set1.remove(1) #刪除一個元素 print(set1) #{2,3,'a','b','c'} set1.pop() #隨機刪除一個元素 print(set1) #{3,'a','b','c'} set1.clear() #清空集合 print(set1) #set()?
3、集合的其它操作
3.1、交集(& 或者 intersection)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) # {4, 5} print(set1.intersection(set2)) # {4, 5}?
3.2、并集(| 或者 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}
3.3、差集(- 或者 difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) # {1, 2, 3} print(set1.difference(set2)) # {1, 2, 3} print(set2 - set1) #{8, 6, 7} print(set2.difference(set1)) #{8, 6, 7}?
3.4、反交集(^ 或者 symmetric_difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}?
3.5、子集: < 或者 issubset 超集: > 或者 issuperset
set1 = {1,2,3} set2 = {1,2,3,4,5,6}print(set1 < set2) # True print(set1.issubset(set2)) # Trueprint(set2 > set1) # True print(set2.issuperset(set1)) # True?
5、frozenset:不可變集合,讓集合變成不可變類型
s = frozenset('barry') print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>?
五、深淺copy
1、賦值運算
l1 = [1,2,3,['a','b']] l2 = l1l1[0] = 111 print(l1) # [11, 2, 3, ['a','b']] print(l2) # [11, 2, 3, ['a','b']] l1[3].append('c') print(l1) # [11, 2, 3, ['a','b','c']] print(l2) # [11, 2, 3, ['a','b','c']]對于賦值,指向的是同一個列表,所以更改l1的時候,l2也隨之改變
?
2、淺拷貝:copy()
l1 = [1,2,3,['a','b']] l2 = l1.copy()l1[0] = 111 print(l1) # [111, 2, 3, ['a','b']] print(l2) # [1, 2, 3, ['a','b']],1沒有改變 l1[3].append('c') print(l1) # [111, 2, 3, ['a','b','c']] print(l2) # [1, 2, 3, ['a','b','c']],列表里面的列表變了對于淺copy來說,第一層創建的是新的內存地址,而從第二層開始,指向的都是同一個內存地址,所以,對于第二層以及更深的層數來說,保持一致性。
?
3、深拷貝:copy.deepcopy(),pycharm需要import copy
import copy l1 = [1,2,3,['a','b']] l2 = copy.deepcopy(l1)l1[0] = 111 print(l1) # [111, 2, 3, ['a','b']] print(l2) # [1, 2, 3, ['a','b']],1沒有改變 l1[3].append('c') print(l1) # [111, 2, 3, ['a','b','c']] print(l2) # [1, 2, 3, ['a','b']],列表里面的列表也沒有發生改變對于深copy來說,兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變
?
轉載于:https://www.cnblogs.com/Coufusion/p/7750676.html
總結
以上是生活随笔為你收集整理的Python学习(四) —— 编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派Raspberry命令行配置无线网
- 下一篇: python列表的append/ente