基本数据类型之集合和字符编码

一 集合

1、定义

  {}内用逗号分隔开多个元素,元素满足下列条件:

    a、集合内元素为不可变型

      print(set([1,1,1,1,1,1,[11,222]]) #报错

    b、集合内元素无序

    c、集合内元素不能重复,重复的元素只算一个

2、内置方法

==============关系运算=============

friends1 = {"zero","kevin","jason","egon"}
friends2 = {"Jy","ricky","jason","egon"}

  a、取交集:两个集合相同的元素

    res = friends1 & friends2

  b、取并集/合集:两集合所有的元素

    res = friends1 | friends2

  c、取差集:一个集合里取出共有的元素,剩下来的为差集

    friends1 的:res = friends1 - friends2

    friends2 的:res = friends2 - friends1

  d、对称差集:两个集合独有的元素,即去除共同的元素

    res = friends1 ^ friends2

  e、父子集

    1、s1:{1,2,3}

       s2:{1,2,4}  #不存在包含关系

    print(s1>s2)  #False

    2、只有当集合s2从属于s1的时候,s1才能成为s2的父集

      当s1=s2时,则互为父子集

================去重===============

  只针对不可变型,无法保证原来的顺序

l=[
    {'name':'lili','age':18,'sex':'male'},
    {'name':'jack','age':73,'sex':'male'},
    {'name':'tom','age':20,'sex':'female'},
    {'name':'lili','age':18,'sex':'male'},
    {'name':'lili','age':18,'sex':'male'},
]
new_l=[]
for dic in l:
    if dic not in new_l:
        new_l.append(dic)

print(new_l)
 

####其他内置方法

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)
 

二 字符编码

详情参考:https://zhuanlan.zhihu.com/p/108805502

##分析过程

  x="上"
                    内存
上-------翻译-----》0101010
上《----翻译《-----0101010
 
字符编码表就是一张字符与数字对应关系的表
 
 
a-00
b-01
c-10
d-11
 
ASCII表:
    1、只支持英文字符串
    2、采用8位二进制数对应一个英文字符串
 
GBK表:
    1、支持英文字符、中文字符
    2、
    采用8位(8bit=1Bytes)二进制数对应一个英文字符串
    采用16位(16bit=2Bytes)二进制数对应一个中文字符串
 
 

unicode(内存中统一使用unicode):

    1、
        兼容万国字符
        与万国字符都有对应关系
    2、
    采用16位(16bit=2Bytes)二进制数对应一个中文字符串
    个别生僻会采用4Bytes、8Bytes
 
 
    unicode表:
                          内存
        人类的字符---------unicode格式的数字----------
                             |                     |
                             |                     |
                             |
                            硬盘                    |
                             |
                             |                     |
                             |                     |
                        GBK格式的二进制       Shift-JIS格式的二进制
 
        老的字符编码都可以转换成unicode,但是不能通过unicode互转
 
 
utf-8:
    英文->1Bytes
    汉字->3Bytes
 
 
 

结论:

    1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式
        英文+汉字-》unicode-》gbk
        英文+日文-》unicode-》shift-jis
        万国字符》-unicode-》utf-8
 
    2、文本文件存取乱码问题
        存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
        取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存
 
 
 

其他内置方法
s={1,2,3}
需要掌握的内置方法1discard
s.discard(4) # 删除元素不存在do nothing
print(s)
s.remove(4) # 删除元素不存在则报错


需要掌握的内置方法2update
s.update({1,3,5})
print(s)

需要掌握的内置方法3pop
res=s.pop()
print(res)

需要掌握的内置方法4add
s.add(4)
print(s)
posted @ 2020-03-12 20:45  NevMore  阅读(186)  评论(0编辑  收藏  举报