day07-集合类型、字符编码(含上节课复习)

上节课复习

上节课复习:
    1、元组
        元组就相当于不可变的列表
        当我们要存放多个值,并且多个值是没有被修改的需求时,应该使用元组
        t=('name',) #t=tuple(('name'))


        总结:
            1、可以存放多个任意类型的值
            2、有序
            3、不可变类型
    2、字典
        用于存放多个值,但是每一个值都有一个对应的key,key对值有描述性的
        功能
        当存放的值属于不同的状态是(年龄、身高、性别、体重),用字典可以明确地
        区分不同值的用途
        d={'name':'egon','age':18} #d=dict(...)
        d=dict(a=1,b=2,c=3)


        v=d.pop('a')
        del d['a']


        d.keys()
        d.values()
        d.items()


        for k in d:
            print(k,d[k])


        for k in d.keys():
            print(k,d[k])


        for v in d.values():
            pass


        for k,v in d.items():
            pass


        d.get('a')

01集合类型

pythoners=['王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱']
linuxers=['陈独秀','wxx','egon','张全蛋']
a=[]
for i in pythoners:
    for i in linuxers:
        a.append(i)
print(i)
结果:['陈独秀', 'wxx']

l2=[]
for stu in pythoners:
    if stu not in linuxers:
        # print(stu)
        l2.append(stu)
print(l2)

结果:['王大炮', '李二丫', '艾里克斯', '欧德博爱']

一、基本使用
1.用途:关系运算、去重
2.定义方式:{}内用逗号分隔开多个元素,每一个元素都必须是不可变(即可hash)类型

#强调:
#2.1 集合内元素都必须是不可变(即可hash)类型
#2.2 集合内的元素无序
#2.3 集合内的元素不能重复

s={1,'a','hello',(1,2,3),4}
# for item in s:

#     print(item)

结果排序是随机的,不固定

# 单纯的用集合去重,需要注意的问题是
#1、去重的目标所包含的值必须都为不可变类型
#2、去重的结果会打乱原来的顺序
# names=['asb','asb','asb','wsb','wsb','egon_nb']
# s=set(names)
# names=list(s)
# print(names)

# 3 常用操作+内置的方法
#优先掌握的操作:
#1、长度len
# pythoners={'王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱'}
# print(len(pythoners))     结果:6

#2、成员运算in和not in

# print('李二丫' in pythoners)

pythoners={'王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱'}
linuxers={'陈独秀','wxx','egon','张全蛋'}

# 3、|并集
print(pythoners | linuxers)
结果:{'欧德博爱', '陈独秀', '艾里克斯', '王大炮', 'egon', 'wxx', '李二丫', '张全蛋'}
print(pythoners.union(linuxers)) 
结果:{'egon', '张全蛋', 'wxx', '欧德博爱', '王大炮', '李二丫', '陈独秀', '艾里克斯'}

#4、&交集
# print(pythoners & linuxers) 结果:{'陈独秀', 'wxx'}
# print(pythoners.intersection(linuxers))结果:{'陈独秀', 'wxx'}

# print(linuxers & pythoners)结果:{'陈独秀', 'wxx'}

#5、-差集
# print(pythoners - linuxers)
# print(pythoners.difference(linuxers))
以上两种结果相同:{'艾里克斯', '王大炮', '李二丫', '欧德博爱'}
# print(linuxers - pythoners)

# print(linuxers.difference(pythoners))
以上两种结果相同:{'张全蛋', 'egon'}

#6、^对称差集
# print(pythoners ^ linuxers)
# print(pythoners.symmetric_difference(linuxers))
# print(linuxers ^ pythoners)
以上三种结果相同:{'王大炮', '李二丫', '欧德博爱', 'egon', '张全蛋', '艾里克斯'}

#7、==
# s1={1,2,3}
# s2={1,2,3}

# print(s1 == s2)

#8、父集(包含关系):>,>=
s1={1,2,3,4,5}
s2={1,2,3}
print(s1 > s2) # s1包含s2
print(s1.issuperset(s2))
print(s2.issubset(s1))
以上有三种结果相同:True

#9、子集(被包含的关系):<,<=
s1={1,2,3,4,5}
s1.add(6)
print(s1)

结果:{1, 2, 3, 4, 5, 6}

# res=s1.pop()#默认从最后一个元素删除

# s1={1,2,3,4,5,}
# res=s1.remove(4)#删除指定整数
# print(res)

# print(s1)

# s1={1,2,3,4,5}
# s2={2,3,7,8}
# s1=s1 - s2
# print(s1)效果相同于: s1.difference_update(s2)

# print(s1)

s1.discard(7) # 即便要删除的元素不存在也不会报错

s1={1,2,3,4,5}
# s2={5,6,7,8}

# print(s1.isdisjoint(s2))#判断是否无交集

#二:该类型总结
# 1 存一个值or存多个值
#     可以存多个值,值都必须为不可变类型
#
# 2 有序or无序
# 无序
#
# 3 可变or不可变
# set集合是可变类型
# s={1,2,3}
# print(id(s))
# s.add(4)
# print(s)

# print(id(s))

#==============集合的去重===========
# 单纯的用集合去重,需要注意的问题是
#1、去重的目标所包含的值必须都为不可变类型

#2、去重的结果会打乱原来的顺序

02 字符编码

1 字符编码
    将人类的字符编码/转换成计算机能识别的数字
    这种转换必须遵循一套固定的标准,该标准无非是
    人类字符与数字的对应关系,称之为字符编码表

00
01
10
11

A---->0000 0000
B---->0000 0001
c---->0000 0002
d---->0000 0003

bit:二进制位
Bytes:字节

ASCII码表:用1Bytes表示一个英文字符
1英文字符=8bit=1Bytes

GBK:用2Bytes表示一个中文字符,1Bytes表示英文字符

unicode:内存中使用的是unicode编码,unicode把全世界的字符都建立好对应关系
    用2Bytes表示一个字符

    0000 0000 0000 0000

    utf-8 #unicode tranform format-8
        utf-8 用1Bytes表示英文,用3Bytes表示中文

#字符编码需要记住的概念
#01 内存中固定使用unicode编码,我们唯一可以改变的存储到硬盘时使用的编码
#02 要想保证存取文件不乱乱码,应该保证文档当初是以什么编码格式存的,就应该以什么编码格式去读取

#03 python3解释器默认编码是UTF-8
    python2解释器默认编码是ASCII

    在python2中有两种字符串编码格式
        1、unicode:
            x=u'上'
        2、unicode编码后的结果
            x='上' #如果文件头为coding:utf-8,那么"上"被存成utf-8格式的二进制


    在python3只有一种字符串编码格式:
        1、unicode
            x='上’


#04  编码与解码
    unicode-------编码encode-------->gbk
    unicode<-------解码decode--------gbk


    #***
    #coding:gbk
    x='上’
    x.decode('gbk')


    #coding:gbk
    x=u'上'
    x.encode('gbk')
    x.encode('utf-8')




    #在python3中(*****)
    x='上'
    x只能进行编码
    x.encode('gbk')


    总结python2与python3:
        (***)
        在python2中的字符粗类型str都是unicode按照文件头的指定的编码,编码之后的结果
        在python2中也可以制造unicode编码的字符串。需要在字符串前加u


        (*****)
        在python3中的字符串类型str都是unicode编码的
        所以python3中的字符串类型可以编码成其他字符编码格式,编码的结果
        是bytes类型




猜你喜欢

转载自blog.csdn.net/qq_17513503/article/details/80740513