数据类型内置方法、字符编码
内容回顾
-
字典的内置方法及操作
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系列()