复习:
元祖跟列表都是索引对应值,eg:一些人的名字
元祖不可变(只读,只有读的需求)如果元祖中只有一个元素,一定要加逗号:t=(1,)
一个人的不同信息,使用字典,key对应value
字典:
dict(['k1',1],['k2',2])
{}.fromkeys(['k1','k2'],None)
----------今日内容----------:
集合(set):首先也是用来存多个值,但是不同于列表,字典,但是集合是操作多个值
作用:
关系运算:
friends1 = ['zero','kevin','jason','egon']
friends2 = ['Jy','ricky','jason','egon']
l = []
for x in friends1:
if x in friends2:
l.append(x)
print(l) # 太复杂了,见内置方法,取得交集
去重(很大的局限性):
定义:{}内用逗号分隔开多个元素,多个元素满足三个条件:
1、集合内元素必须为不可变类型
2、集合内元素无序
3、集合内元素不能重复(如果元素重复,只留一个)
s = {} # 默认定义类型为字典
s = set() # 定义空集合
s = {1,2} # s = ({1,2})
s = {1,[1,2]} # 错误,不可以有可变类型(列表)
类型转换:
res = set('hellolllll')
print (res)
print(set([1,1,1,1,1,1])) # 可以
print(set([1,1,1,1,1,1,[111,222]])) # 不可以,存在子列表
print(set({'k1':1,'k2':2})) # 取出的是字典的key
内置方法:
=================关系运算=================
friends1 = {'zero','kevin','jason','egon']}
friends2 = {'Jy','ricky','jason','egon'}
取交集(两者共同的好友):
res = friends1 & friends2
print(res)
取并集(合集):两者所有的好友
print (friends1 | friends2)
取差集(friends1独有的好友):
print(friends1 - friends2) # 从1里面减去2里面共有的,剩下的就是1独有的
取对称差集(两者独有的好友(去掉共有的好友)):
print(friends1 ^ friends2)
取父子集(包含的关系):
s1 = {1,2,3}
s2 = {1,2}
print(s1 > s2) # s1是s2的父集
===================去重===================
1、针对不可变类型去重复
2、无法保证原来的顺序
=================其他内置=================
s = {1,2,3}
需要掌握的内置方法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)
总结与分类:
有序(序列类型)/无序:
有序:(有索引的)str、list、元祖
无序:dict(key映射value)
一个值(原子类型)/多个值(容器类型):
一个:数字、str
多个:list、元祖、字典、集合
可变/不可变
可变:list、字典、集合
不可变:数字、str、元祖
文件处理基本操作
1、字符编码(理论多,结论少)
文件文本、字符串 涉及到字符编码的问题
字符对应一串二进制的数字(字符编码表,ascii码表)
字符串---》计算机翻译---》二进制数字
字符串《---计算机翻译《---二进制数字
ASCII码表
1、只支持英文字符
2、采用8位二进制对应一个英文字符
GBK表
1、支持英文字符、英文字符
2、采用8位(8bit=1Bytes)二进制对应一个英文字符
3、采用16位(16bit=2Bytes)二进制对应一个中文字符
unicode(内存中统一使用的编码表)
1、兼容万国字符,与万国字符编码表都有对应关系
2、采用16位(16bit=2Bytes)二进制数对应一个字符,个别生僻的会采用4Bytes、8Bytes
Unicode表(存放的是):
人类的字符---》unicode格式对应的数字
老的字符编码都可以转换成unicode,但是不能通过unicode互转
utf-8(unicode transform fotmat-8):unicode的精简&转换版本
英文字符--》1Bytes
汉字字符--》3Bytes
编码与解码
编码:字符--->unicode(内存)--->硬盘(老的编码格式)
解码:硬盘(老的编码格式)--->unicode(内存)--->字符
保证不乱码:以什么编码格式存的,就必须以什么格式读取
总结(需要记住的结论):
内存固定使用的编码是unicode,我们以为可以改变的是存入硬盘采用的编码格式
中文+英文:unicode--》gbk
万国字符:unicode--》utf-8
文本文件存取乱码问题
存乱了:二觉方法是,编码格式应该设置成支持文件内字符串的格式
取乱了:解决方法是,文件是以什么编码格式存入硬盘的,就应该以什么编码格式读入内存
python解释器默认读取文件的编码
python3默认:UTF-8
python2默认:ASCII
制定文件头部修改默认的编码:
在py文件的首行写:#coding:UTF-8(或者其他编码格式)
###!!!保证运行python程序前两个阶段不乱码核心法则:
指定文件头#coding:文件当初存入硬盘时所采用的编码格式
python3的str类型默认直接存成unicode格式,无论如何都不会出现乱码
保证python2的str类型不会出现乱码,在字符串之前加一个小u,英文的编码是万国编码都兼容的:
x = u'上'
python2解释器中有两种字符串类型:str、unicode
#str类型
x = '上'
#unicode类型 # 字符串值会按照文件头制定的编码格式存入
x = u'上' # 强制存成unicode
###!!!如果要用python2写程序,定义字符串的时候要尤其注意在字符串之前加一个小u
python3中:
x = '上'
res = x.encode('gbk') # unicode-->gbk
print(res,type(res)) # <class 'bytes'>
print(res.decode('gbk')) # 得到的结果是‘上’
假设一开始是gbk格式存的,针对python3:加个文件头#coding:gbk
浙公网安备 33010602011771号