python集合、字符编码、bytes与二进制
集合
用括号表示{ },可以包含多个元素,用逗号分割
用途
用于关系运算
集合特点
1.每个元素是不可变类型 2.没有重复的元素 3.无序
应用
1.set去重
set(names)的功能是将列表转换成集合,并去除重复值 但是因为集合里面的元素时不可变的,所以set在去重时对象所包含的值不能有不可变类型,例如不能有 [ ]{ } names=['zhangsan','lisi','wangwu','zhangsan','zhaoliu'] s=set(names) print(s) E:\PycharmProjects\untitled\venv\Scripts\python.exe E:/PycharmProjects/untitled/平时问题积累.py {'zhangsan', 'lisi', 'zhaoliu', 'wangwu'}
2.合集功能
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} linuxs={'wupeiqi','oldboy''gangdan',} # 1.长度 print(len(pythons)) # 2.成员运算 True False print('alex' in pythons) # 3.并集(2个变量合并,重复元素只取一个) print(pythons | linuxs) # 4.交集( 取出同值) print(pythons & linuxs) # 5.对称差集(剔除共同值,合并其他值) print(pythons ^ linuxs) # 5.差集(左-右 剔除右边元素里面和左相同值 ,最后打印左边剩余的) print(pythons - linuxs) E:\PycharmProjects\untitled\venv\Scripts\python.exe E:/PycharmProjects/untitled/平时问题积累.py 6 True {'yuanhao', 'oldboygangdan', 'alex', 'gangdan', 'wupeiqi', 'egon', 'biubiu'} {'wupeiqi'} {'yuanhao', 'oldboygangdan', 'egon', 'alex', 'biubiu', 'gangdan'} {'yuanhao', 'egon', 'biubiu', 'alex', 'gangdan'} s1={1,2,3,4,5} s2={1,2,3,} # 6.相等 print(s1 == s2) # 7.父集(包含关系) print(s1 >= s2) # 8.父集(被包含关系) print(s2 <= s1) E:\PycharmProjects\untitled\venv\Scripts\python.exe E:/PycharmProjects/untitled/平时问题积累.py False True True
字符编码
如何理解字符编码:将人类的字符编码/转换成计算机能识别的数字,这种转换必须遵循一套固定的标准,
该标准无非是,人类字符与数字的对应关系,称之为字符编码表。
A---->0000 0000 bit:是二进制位 byte:字节 B---->0000 0001 c---->0000 0002 d---->0000 0003
unicode与utf-8理解
1个英文字母=8bit=1bytes 英文字符:ASCII码表:用1Bytes表示一个英文字符 1英文字符=8bit=1Bytes 中文字符:GBK:用2Bytes表示一个中文字符,1Bytes去表示英文字符 unicode:内存中使用的是unicode编码,unicode把全世界的字符都建立好对应关系 用2Bytes去表示一个字符 utf-8 #unicode tranform format-8 utf-8 用1Bytes表示英文,用3Bytes表示中文
字符编码需要记住的概念:
01:内存中固定使用unicode编码,我们唯一可以改变的存储到硬盘时使用的编码
02: 要想保证存取文件不乱乱码,应该保证文档当初是以什么编码格式存的,就应该以什么编码格式去读取
字符编码应用:
1)pyhton2
在python2中有两种字符串编码格式 1、unicode: x=u'上' x为unicod类型 2、unicode编码后的结果 x='上' #如果文件头为coding:utf-8,那么"上"被存成utf-8格式的二进制 x为str类型 在python3只有一种字符串编码格式: 1、unicode x='上’ x为str类型
书写
#*** #coding:gbk x='上’ x.decode('gbk') #coding:gbk x=u'上' x.encode('gbk') x.encode('utf-8')
理解编码与解码
unicode-------编码encode-------->gbk
unicode<-------解码decode--------gbk
2)Python3
在python3中(*****) x='上' x只能进行编码 x.encode('gbk')
3)Pyhton2与Python3使用总结
总结python2与python3: (***) 在python2中的字符粗类型str都是unicode按照文件头的指定的编码,编码之后的结果 在python2中也可以制造unicode编码的字符串。需要在字符串前加u (*****) 在python3中的字符串类型str都是unicode编码的 所以python3中的字符串类型可以编码成其他字符编码格式,编码的结果 是bytes类型
Bytes类型与二进制的演变:
#看“中”bytes—二级制之间的转换 res='中'.encode('utf-8') print(res) #b'\xe4\xb8\xad' #循环取出这个bytes for i in b'\xe4\xb8\xad': print(i) ''' 228 184 173 ''' #发现字符“中”由三个3位数据构成,即228 184 173, # 将其转化成二进制格式 print(bin(228)) #0b11100100 print(bin(184)) #0b10111000 print(bin(173)) #0b10101101 #二进制,即在计算机中的存储方式 #发现字符“中”的utf-8编码方式为:11100100 10111000 10101101,这也是它在计算机中存储的方式。 #ASCII码能够表示的字符(0-9a-zA-Z及一些标点符号转义字符等)转化成utf-8码不发生改变,因为utf-8编码是ASCII编码的超集。 res1='afAFA!@#'.encode('utf-8') #b'afAFA!@#' print(res1) #而实际上存储的是各字符的ASCII码值: for j in b'afAFA!@#': print(j) ''' 97 102 65 70 65 33 64 35 '''