09字符编码

字典与集合练习题实操

字符编码

  • 字符编码发展史

  • 字符编码实操

 

字典与集合练习题详解

1.字典练习题
   1.将列表中大于等于66的元素放入字典k1键对应的列表中
  将列表中小于66的元素放入字典k2键对应的列表中
       nums = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
       dic = {
           'k1': [],
           'k2': []
      }

       for i in nums:
           if i >= 66:
               dic['k1'].append(i)
           else:
               dic['k2'].append(i)

       print(dic)
       
   2.s='hello jason jason say hello sb sb sb'
统计字符串中每个单词出现的次数
      {'jason':2,...}
       # 第一种方法
       s = 'hello jason jason say hello sb sb sb'
       res = s.split()
       dic = {}
       for i in res:
           dic[i] = res.count(i)
       print(dic)
       
       # 第二种方法
       s = 'hello jason jason say hello sb sb sb'
       res = s.split()
       dic = {}
       for i in res:
           if i not in dic:
               dic[i] = 1
           else:
               dic[i] += 1
       print(dic)
       
       #第三种方法
       s = 'hello jason jason say hello sb sb sb'
       res = s.split()
       dic = {}
       for i in res:
           if dic.get(i) == None:
               dic[i] = 1
           else:
               dic[i] += 1

       print(dic)
       
2.集合练习题
 一.关系运算
     有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
     pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
     linuxs={'wupeiqi','oldboy','gangdan'}
     1. 求出即报名python又报名linux课程的学员名字集合
     2. 求出所有报名的学生名字集合
     3. 求出只报名python课程的学员名字
     4. 求出没有同时这两门课程的学员名字集合
     二 去重并且保留原来的顺序
  l = [11,22,33,22,22,33,11,22,55,66,66,77,77]
       1.去重不保留顺序
       2.去重并且保留顺序
       
       
       pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
       linuxs = {'wupeiqi', 'oldboy', 'gangdan'}

       print('两个班都报名的人员集合为:', pythons & linuxs)
       print('所有报名人员的集合为:', pythons | linuxs)
       print('只报名python的人员的集合为:', pythons - linuxs)
       print('没有同时报两个班的人员的集合为:', pythons ^ linuxs)

       l = [11, 22, 33, 22, 22, 33, 11, 22, 55, 66, 66, 77, 77]
       se = list(set(l))
       print('去重不保留顺序:', se)

       l2 = []
       for i in l:
           if i not in l2:
               l2.append(i)

       print('去重保留顺序:', l2)

字符编码

计算机内部存储数据都是以二进制数字的形式存储
计算机基于电工作 而电信号只有高低电平两种状态
   也就意味着计算机的世界里只能识别两种状态
   我们人为的将高电平定义为数字1
   低电平定义为数字0
  0 你
   1    我
   
   00
   01
   10
   11
   
   000
  ...
   
单位换算(重要)
比特位bit(二进制数的个数)
   8bit = 1bytes(字节)
   1024bytes = 1KB
   1024KB = 1MB
   1024MB = 1GB
   1024GB = 1TB
   1024TB = 1PB
 
字符编码的研究仅限于文本文件(******)


为什么我们人类在使用计算机输入字符的时候电脑展示是人类能够看懂的字符
而计算机内部只识别01二进制
00001010 我
   00001101              你
   计算机二进制 设定好的对应关系 人类的字符
   
字符编码表
规定了人类的字符与数字之间的对应关系

字符编码发展史

一家独大
计算机是由美国人发明的 美国人需要计算机能够识别英文
   所以发明了ASCII码(字符编码表)
  记录了英文与数字的对应关系
      1bytes来表示所有的英文及符号
  8bit 256
                # 所有的英文字母及符号加起来其实也不会超过128种可能
群雄割据
中国
  中国人为了计算机能够识别中文发明了GBK码
       GBK码表
      记录了中文、英文与数字的对应关系
          2bytes来表示中文及符号
              16bit       65535
               1bytes来表示所有的英文及符号
                   # 生僻字可能会使用更多的bytes来表示
       
   日本
  日本人为了计算机能识别日文发明了shift_JIS码
       shift_JIS码表
      记录了日文、英文与数字的对应关系
           1bytes来表示所有的英文及符号
         
   韩国
韩国人为了计算机能识别韩文发明了Euc_kr码
       Euc_kr码表
      记录了韩文、英文与数字的对应关系
           1bytes来表示所有的英文及符号
天下一统
群雄割据导致数据交互不通畅(乱码)
   unicode万国码
  兼容万国字符
       所有的字符同意使用2bytes表示 不够增加更多bytes
   utf8
  unicode transformation format
       英文还是用1bytes
       中文改用3bytes
  # 内存使用的编码表是unicode 硬盘使用的是utf8
'''已经你们只需要记住文本文件编码统一使用utf8即可'''

字符编码实操

1.解决文件乱码的核心
文件以什么编码存的就以什么编码取
2.编码与解码(重要)
编码
  将人类的字符按照指定的编码转换成计算机能够识别的数据
       encode()
   解码
  将计算机能否识别的数据按照指定的编码转换成人类能够读懂的字符
       decode()
3.python解释器默认编码
python2默认的是ASCII码
  在python2中定义字符串在前面加一个字母u
       文件头指定编码
      # -*- coding:utf8 -*-
           name = u'jason'
   python3默认的是utf8码

 

上一篇:leetcode-python-字母异位词分组


下一篇:多线程爬虫之生产者和消费者模式