数据类型内置方法、字符编码

内容回顾

  • 字典的内置方法及操作

    1、类型转换

    dict()
    字典的转换一般不使用关键字 而是自己动手转
    

    2、字典必须要掌握的操作

    dic = {
    'username': 'jason',    
     'age' : 18  
      'habby': ['read', 'run', 'music']  
    }
    

    2.1、按键取值(不推荐使用)

    print(dic['age'])  # 18
    print(dic['password'])  # k不存在直接报错
    

    2.2、按内置方法get取值(推荐使用)

    print(dic.get('username'))  # jason
    print(dic.get('age'))  # None
    print(dic.get('age', '哈哈哈'))  # 18 键存在的情况下获取对应的值
    print(dic.get('pwd', '哈哈哈'))  # 哈哈哈 键不存在默认返回None 可以通过第二个参数自定义
    

    2.3、修改数据值

    print(id(dic))  # 2030116614008
    dic['age'] = 99  # 键存在则修改对应的值
    print(dic)  # {'username': 'jason', 'age': 99, 'hobby': ['read', 'music', 'run']}
    print(id(dic))  # 2264828292984
    

    2.4、新增键值对

    dic['password'] = 123
    print(dic)  #{'username': 'jason', 'age': 18, 'hobby': ['read', 'music', 'run'], 'password': 123}
    

    2.5、删除数据

    del dic['username']
    print(dic)  #{'age': 18, 'hobby': ['read', 'music', 'run']}
    res = dic.pop('username')
    print(dic)  # {'age': 18, 'hobby': ['read', 'music', 'run']}
    print(res)  # jason
    

    2.6、统计字典中键值对的个数

    print(len(dic))  # 3
    

    2.7、字典三剑客

    ​ 剑客一:一次性获取字典所有的键

    print(dic.keys())  # dict_keys(['username', 'age', 'hobby'])获取的键可以看做是一个列表能够支持for循环
    

    ​ 剑客二:一次性获取字典所有的值

    print(dic.values())  # dict_values(['jason', 18, ['read', 'music', 'run']])获取的键也可以看做是一个列表支持for循环
    

    ​ 剑客三:一次性获取字典的键值对数据

    print(dic.items())  # dict_items([('username', 'jason'), ('age', 18), ('hobby', ['read', 'music', 'run'])])可以看做是元组套列表的形式
    '''
    for k, v in dic.items():
    	print(k, v)
    	打印出的是:
        username jason
    	age 18
    	hobby ['read', 'music', 'run']
    	等价于:
    for i in dic.items():
    	k, v = i
    	print(k, v)
    '''
    

    2.8、补充说明

    print(dict.fromkeys(['name', 'pwd', 'hobby'], 123))  # {'name': 123, 'pwd': 123, 'hobby': 123} 快速生成值相同的字典
    试题:
        res = dict(['name', 'pwd', 'hobby'], [])
        print(res)  # {'name': [], 'pwd': [], 'hobby': []}
        res['name'].append('jason')
        res['pwd'].append('123')
        res['hobby'].append('read')
        print(res)  # {'name': ['jason', 123, 'read'], 'pwd': ['jason', 123, 'read'], 'hobby': ['jason', 123, 'read']}
      """当第二个公共值是可变类型的时候 一定要注意 通过一个键修改都会影响所有"""
    键存在则不修改 结果是键对应的值
    	res = dic.setdefault('username', 'tony')
        print(res)  # jason
    键不存在则新增键值对 结果是新增的值
    	res1= dic.setdefault('age', 123)
        print(res1)  # 123
        print(dic)  # {'username': 'jason', 'age': 18, 'hobby': ['read', 'music', 'run'], 'pwd': 123}
    弹出键值对 后进先出
    	print(dic.popitem())  # ('hobby', ['read', 'music', 'run'])
    
  • 元组的内置方法及操作

    1、类型转换

    tuple()
    PS:支持for循环的数据类型都可以转成元组
    

    2、元组必须掌握的方法

    t1 = (11, 22, 33, 44, 55, 66)
    

    2.1、索引取值

    print(t1[0]  # 11
    

    2.2、切片操作

    print(t1[1:5])  # (22, 33, 44, 55)
    

    2.3、间隔、方向

    print(t1[1:5:1])  # (22, 33, 44, 55)
    print(t1[1:5:2])  # (22, 44)
    print(t1[-5:-1])  # (22, 33, 44, 55)
    print(t1[-1:-5])  # ()
    print(t1[-1:-5:-1])  # (66, 55, 44, 33)
    

    2.4、统计元组内数据值出现的个数

    print(len(t1))  # 6
    

    2.5、统计元组内某个数据值出现的的次数

    print(t1.count(11))  # 1
    

    2.6、统计元组内指定数据值的索引值

    print(t1.index(11))  # 0
    

    2.7、元组内如果只有一个数据值那么逗号不能少

    res = (1,)
    print(type(res))  # tuple
    

    2.8、元组内索引绑定的内存地址不能被修改

    ​ 元组不能新增或删除数据

  • 集合的内置方法及操作

    1、类型转换

    set()
    集合内数据必须是不可变类型(整型、浮点型、字符串、元组)
    集合内数据也是无序的 没有索引的概念
    

    2、集合需要掌握的方法:去重 关系运算

    ​ 2.1、去重

    s1 = {11, 22, 33, 44, 22, 33, 11, 44, 55}
    s2 = [22, 33, 55, 66, 33, 55, 33, 44, 22]
    s3 = set(s2)
    s2 = list(s3)  # [33, 66, 44, 22, 55]
    """"集合的去重无法保留原先数据的排列顺序"""
    

    ​ 2.3、关系运算

    群体之间做差异化校验
    eg:两个QQ号之间做差异化校验
    用户1好友列表:t1 = {'jason', 'tony', 'oscar', 'marry'}
    用户2好友列表:t2 = {'jack', 'tony', 'oscar', 'tom'}
    1、求两个人的共同
    print(t1 & t2)  # {'tony', 'oscar'}
    2、求用户1独有的好友
    print(t1 - t2)  # {'marry', 'jason'}
    3、求两个人所有的好友
    print(t1 | t2)  # {'jason', 'jack', 'tom', 'tony', 'marry', 'oscar'}
    4、求两个各自独有的好友
    print(t1 ^ t2)  # {'marry', 'jason', 'jack', 'tom'}
    5、父集 子集
    print(t1 < t2)  # False
    print(t2 > t2)  # False
    
  • 字符编码理论

    1、字符编码只针对文本数据

    # 只跟文本文件和字符串有关 与视频文件 图片文件等无关
    
    # 什么是字符编码
    	由于计算机内部只识别二进制 但是用户在使用计算机的时候却可以看到各式各样的语言字符
    	字符编码:内部记录了人类字符与数字对应关系的数据
    

    2、字符编码发展史

    1、一家独大
    	计算机最初是由美国人发明的 美国人为了能够让计算机识别英文字符
        ASCII:里面记录了英文字符与数字的对应关系 用一个字节(8bit)来表示一个英文字符
    2、群雄割据
    	中国人:
        	GBK码:记录了英文、中文与数字的对应关系
            用至少16bit(2字节)来表示一个中文字符
            很多生僻字还需要使用更多的字符
            英文还是用8bit(一字节)来表示
        日本人:
        	shift_JIS码记录了英文、日文与数字的对应关系
          韩国人:
        	Eur_kr码记录了英文、韩文与数字的对应关系
          """
          每个国家的计算机使用的都是自己定制的编码本
          不同的国家的文本数据无法直接交互 都会出现——>乱码
          """
    3、天下统一
    	uincode万国码:兼容所用国家语言 起步就是两个字节来表示字符
        utf系列:utf8 utf16...专门用来优化unicode储存问题 英文还是采用1个字节 中文3个字节
    
  • 字符编码实操

    1、针对乱码 切换编码慢慢试即可
    2、编码与解码
    	编码:将人类字符按照指定的编码 编码成计算机能够读懂的数据
        	字符串.encode()
        解码:将计算机能够读懂的数据按照指定的编码解码成人类能够读懂的
        	bytes类型数据.decode()
    3、python2与python3的差异
    	python2默认的编码是ASCII
    	1、文件头
        	encoding;utf8
         2、字符串前面加u
        	u'哈哈哈'
         python3默认的编码是utf系列()
         
    
posted @ 2022-09-30 19:36  小福福  阅读(30)  评论(0编辑  收藏  举报