zoukankan      html  css  js  c++  java
  • 集合 字符编码

    一.集合

    一)作用:集合 list tuple dict一样都可以存放多个值,但实际和主要用于:去重 关系运算

    二)定义:在{}内用逗号分隔开多个元素,集合具备以下三个特点:
    1:每个元素必须是不可变类型
    2:集合内没有重复的元素
    3:集合内元素无序

    1 s = {1,2,3,4}  # 本质 s = set({1,2,3,4})

    # 注意1:列表类型是索引对应值,字典是key对应值,均可以取得单个指定的值,而集合类型既没有索引也没有key与值对应,所以无法取得单个的值,而且对于集合来说,主要用于去重与关系元素,根本没有取出单个指定值这种需求。

    # 注意2:{}既可以用于定义dict,也可以用于定义集合,但是字典内的元素必须是key:value的格式,现在我们想定义一个空字典和空集合,该如何准确去定义两者?
    d = {} # 默认是空字典
    s = set() # 这才是定义空集合

     

    三)类型转换:

    但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型

    1 >>> s = set([1,2,3,4])
    2 >>> s1 = set((1,2,3,4))
    3 >>> s2 = set({'name':'jason',})
    4 >>> s3 = set('egon')
    5 >>> s,s1,s2,s3
    6 {1, 2, 3, 4} {1, 2, 3, 4} {'name'} {'e', 'o', 'g', 'n'}

    四)

    1)关系运算

    我们定义两个集合S1与S2分别存放两个相同的名字:

    1 S1={'小明','小美','小红','小燕'}
    2 S2={'小文','小琴','小红','小燕'}

    关系图如下:

     1 # 1.合集(|):求两个用户所有的好友(重复好友只留一个)
     2 >>> friends1 | friends2
     3 {'小明','小美','小红','小燕','小文','小琴'}
     4 
     5 # 2.交集(&):求两个用户的共同好友
     6 >>> S1& S2
     7 {'小红','小燕''}
     8 
     9 # 3.差集(-):
    10 >>> S1- S2# 求用户1独有的好友
    11 {'小明','小美'}
    12 >>> friends2 - friends1 # 求用户2独有的好友
    13 {'小文','小琴'}
    14 
    15 # 4.对称差集(^) # 求两个用户独有的好友们(即去掉共有的好友)
    16 >>> friends1 ^ friends2
    17 {'小明','小美','小文','小琴'}
    18 
    19 # 5.值是否相等(==)
    20 >>>S1 == S2
    21 False
    22 
    23 # 6.父集:一个集合是否包含另外一个集合
    24 # 6.1 包含则返回True
    25 >>> {1,2,3} > {1,2}
    26 True
    27 >>> {1,2,3} >= {1,2}
    28 True
    29 # 6.2 不存在包含关系,则返回True
    30 >>> {1,2,3} > {1,3,4,5}
    31 False
    32 >>> {1,2,3} >= {1,3,4,5}
    33 False
    34 
    35 
    36 # 7.子集
    37 >>> {1,2} < {1,2,3}
    38 True
    39 >>> {1,2} <= {1,2,3}
    40 True

     2.去重

     1 1、只能针对不可变类型去重
     2 print(set([1,1,1,1,2]))
     3 
     4 2、无法保证原来的顺序
     5 l=[1,'a','b','z',1,1,1,2]
     6 l=list(set(l))
     7 print(l)
     8 
     9 
    10 l=[
    11     {'name':'lili','age':18,'sex':'male'},
    12     {'name':'jack','age':73,'sex':'male'},
    13     {'name':'tom','age':20,'sex':'female'},
    14     {'name':'lili','age':18,'sex':'male'},
    15     {'name':'lili','age':18,'sex':'male'},
    16 ]
    17 new_l=[]
    18 for dic in l:
    19     if dic not in new_l:
    20         new_l.append(dic)
    21 
    22 print(new_l)

    3.其他操作方法

     1 其他内置方法
     2 s={1,2,3}
     3 需要掌握的内置方法1:discard
     4 s.discard(4) # 删除元素不存在do nothing
     5 print(s)
     6 s.remove(4) # 删除元素不存在则报错
     7 
     8 
     9 需要掌握的内置方法2:update
    10 s.update({1,3,5})
    11 print(s)
    12 
    13 需要掌握的内置方法3:pop
    14 res=s.pop()
    15 print(res)
    16 
    17 需要掌握的内置方法4:add
    18 s.add(4)
    19 print(s)
    其余方法全为了解
    res=s.isdisjoint({3,4,5,6}) # 两个集合完全独立、没有共同部分,返回True
    print(res)

    了解
    s.difference_update({3,4,5}) # s=s.difference({3,4,5})
    print(s)




    二.字符编码

    分析过程

    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、文本文件存取乱码问题
    存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
    取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存

     

    3、python解释器默认读文件的编码
    python3默认:utf-8
    python2默认:ASCII

    指定文件头修改默认的编码:
    在py文件的首行写:
    #coding:gbk

    4、保证运行python程序前两个阶段不乱码的核心法则:
    指定文件头
    # coding:文件当初存入硬盘时所采用的编码格式


    5、
    python3的str类型默认直接存成unicode格式,无论如何都不会乱码
    保证python2的str类型不乱码
    x=u'上'


    6、了解
    python2解释器有两种字符串类型:str、unicode
    # str类型
    x='上' # 字符串值会按照文件头指定的编码格式存入变量值的内存空间
    # unicode类型
    x=u'上' # 强制存成unicode

  • 相关阅读:
    最高效的无限级菜单生成方法
    MySQL性能优化的最佳20+条经验(转)
    Web应用中的轻量级消息队列
    Delphi Setlength 内存释放总结
    Delphi 的TSpeedButton按下和弹起效果
    Delphi存取图像完整解决方案
    delphi 开机自动运行代码
    有关时间限制使用和软件注册的设计(delphi)
    Linux环境thinkphp配置以及数据源驱动改动
    Dalvik和ART简单介绍
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/12468523.html
Copyright © 2011-2022 走看看