复习:
元祖跟列表都是索引对应值,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