Day10 集合 字符编码
一、集合
集合、list、tuple、dict一样都可以存放多个值,但是集合主要用于:去重、关系运算
去重: 1.只能针对不可变类型去重
2.无法保证原来的顺序
定义:在{}内用逗号分隔开多个元素,集合具备以下三个特点:
1:每个元素必须是不可变类型
2:集合内没有重复的元素
3:集合内元素无序
类型转换:但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
内置方法:
friends1 = {"zero","kevin","jason","ssz"}
friends2 = {"Jy","ricky","jason","ssz"}
① 取交集:两者共同的好友
res=friends1 & friends2
print(res)
print(friends1.intersection(friends2))
② 取并集/合集:两者所有的好友
print(friends1 | friends2)
print(friends1.union(friends2))
③ 取差集:取friends1独有的好友
print(friends1 - friends2)
print(friends1.difference(friends2))
取friends2独有的好友
print(friends2 - friends1)
print(friends2.difference(friends1))
④ 对称差集: 求两个用户独有的好友们(即去掉共有的好友)
print(friends1 ^ friends2)
print(friends1.symmetric_difference(friends2))
⑤父子集:包含的关系
s1={1,2,3}
s2={1,2}
print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2他爹
print(s1.issuperset(s2))
print(s2.issubset(s1)) # s2 < s2 =>True
s1={1,2,3}
s2={1,2,3}
print(s1 == s2) # s1与s2互为父子
print(s1.issuperset(s2))
print(s2.issuperset(s1))
其他操作
1.长度
>>> s={'a','b','c'}
>>> len(s)
2.成员运算
>>> 'c' in s
True
3.循环
>>> for item in s:
... print(item)
...
c
a
其他内置方法:
1:discard
# s.discard(4) # 删除元素不存在do nothing
# print(s)
# s.remove(4) # 删除元素不存在则报错
2:update
# s.update({1,3,5})
# print(s)
3:pop
# res=s.pop()
# print(res)
4:add
# s.add(4)
# print(s)
5.了解
res=s.isdisjoint({3,4,5,6}) # 两个集合完全独立、没有共同部分,返回True
print(res)
# s.difference_update({3,4,5}) # s=s.difference({3,4,5})
# print(s)
二、字符编码
1.什么是字符编码
人类在与计算机交互时,用的都是都是人能读懂的字符,而计算机只能识别二进制。因此,由人类的字符到计算机中的数字,必须经历字符——》翻译——》数字这一过程,翻译的过程必须参照一个特定的标准,该标准称之为字符编码表,该表上存放的就是字符与数字一一对应的关系。编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字。
2.字符编码表
ASCII表:
①只支持英文字符串
②采用8位二进制数对应一个英文字符串
GBK表:
①支持英文字符、中文字符
②采用8位(8bit=1Bytes)二进制数对应一个英文字符串
采用16位(16bit=2Bytes)二进制数对应一个中文字符串
unicode(内存中统一使用unicode):
①兼容万国字符
与万国字符都有对应关系
②采用16位(16bit=2Bytes)二进制数对应一个中文字符串
个别生僻会采用4Bytes、8Bytes
Unicode表在内存中使用,而很多老的硬盘和软件都是使用老的编码表,软件都是存在于硬盘中,运行时需加载到内存,unicode的存在可以让计算机运行这些软件而不产生乱码。因此Unicode可以和老的字符编码相互转换,但是老的字符编码表不能通过Unicode互转。
utf-8:将内存中的unicode二进制写入硬盘或者基于网络传输时必须将其转换成一种精简的格式,这种格式即utf-8
英文->1Bytes
汉字->3Bytes
结论:
1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式
英文+汉字-》unicode-》gbk
英文+日文-》unicode-》shift-jis
万国字符》-unicode-》utf-8
2、文本文件存取乱码问题
存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存
3 字符编码表的应用
python3中默认编码是方式是utf-8,python2是ASCII,因此我们可以在文件首行写入(# coding: 当初文件写入硬盘时采用的编码格式)来修改解释器默认的编码。
在Python3中,字符串类的值都是使用unicode格式来存储,而python2早于Unicode,因此因此在Python2中是按照文件头指定的编码来存储字符串类型的值的(如果文件头中没有指定编码,那么解释器会按照它自己默认的编码方式来存储),所以,这就有可能导致乱码问题。因此我们可以在就是在字符串类型前加u,则会将字符串类型强制存储unicode,解决乱码问题。
4 字符串encode编码与decode解码的使用
encode:由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode
res=x.encode('utf-8')
decode:由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode
res.decode('utf-8')
浙公网安备 33010602011771号