数据类型的内置方法及字符编码理论
一、内置方法之字典相关操作
1.类型转换
dict()
字典的转换一般不使用关键字,而是自己动手转
2.字典必须掌握的操作
user_dict = {
'username': 'jason',
'password': 123,
'hobby': ['read', 'music', 'run']
}
-
按k取值(不推荐)
print(user_dict['username']) # jason print(user_dict['phone']) # k不存在会报错
-
按内置方法get取值(推荐)
print(user_dict.get('username')) # jason print(user_dict.get('age')) # None print(user_dict.get('age', '没有嘿嘿嘿')) # 键不存在默认返回None 可以通过第二个数自定义
-
修改值数据
user_dict['usernam'] = 'tony' # 键存在则修改对应的值 print(user_dict) print(id(user_dict))
-
新增键值对
user_dict['age'] = 18 print(user_dict) # 键不存在时新增键值对
-
删除数据
del user_dict['username'] print(user_dict)
-
统计字典中键值对的个数
print(len(user_dict)) # 3
-
字典三剑客
print(user_dict.keys()) # 一次性获取字典所有的键 print(user_dict.values()) # 一次性获取字典所有的值 print(user_dict.items()) # 一次性获取字典的键值对数据 for i in user_dict.items(): k, v = i print(i)
-
补充说明
print(dict.fromkeys(['name','pwd','hobby'],123)) # 快速生成值相同的字典 eg: res = dict.fromkeys(['name', 'pwd', 'hobby'], []) print(res) # {'name': [], 'pwd': [], 'hobby': []} eg: res['name'].append('jason') res['pwd'].append(123) res['hobby'].append('study') print(res) eg: # 键存在则不修改 结果是键对应的值 res = user_dict.setdefault('username','tony') print(user_dict, res) # jason', 'password': 123, 'hobby': ['read', 'music', 'run']} jason eg: # 存不存在则新增键值对 结果是新增的值 res = user_dict.setdefault('age',123) print(user_dict, res) # jason', 'password': 123, 'hobby': ['read', 'music', 'run'], 'age': 123} 123
二、内置方法之元组相关操作
1.类型转换
tuple()
支持for循环的数据类型都可以转换为元组
print(tuple(22.2)) # 报错
print(tuple[11, 22, 33, 33]) # (11, 22, 33, 33)
print(tuple({123, 333, 444})) # (123, 444, 333)
2.元组必须掌握的方法
l1 = (11, 22, 33, 44, 55, 66)
1.索引取值
print(l1[2]) # 33
2.切片
print(l1[2:4]) # (33, 44)
3.间隔,步长
print(l1[0:5:2]) # (11, 33, 55)
4.统计元组内某个数据值出现的个数
print(len(l1)) # 6
5.统计元组内某个数据值出现的次数
print(l1.count(22)) # 1
6.统计元组内指定数据值的索引值
print(l1.index(22)) # 1
7.元组内如果只有一个数据值那么逗号不能少
8.元组内索引绑定的内存地址不能被修改(可变数据类型内存地址不变的)
可变数据类型有:集合,列表,字典
9.元组不能新增或者删除数据
三、内置方法之集合相关操作
1.类型转换
set()
集合内的数据必须是不可变类型(整型,浮点型,字符串,元组)
集合内数据是无序的 没有索引的概念
2.集合需要掌握的方法
只有遇到去重和关系运算这两种需求的时候才应该考虑使用集合
-
去重
去除集合内重复的数据值 eg: l2 = {11, 33, 44, 88, 99} l1 = set(l2) l2 = list(l1) print(l2) # [33, 99, 88, 11, 44]
-
关系运算
& 共同的部分 - 独有的部分 | 全部的部分(和) ^ 独有部分的和 eg: l1 = {11, 22, 33, 44, 55, 66} l2 = {11, 33, 44, 88, 99} print(l1 & l2) # 两个共同的数字 print(l1 - l2) # l1独有的数字 print(l1 | l2) # 两个共同的数字 print(l1 ^ l2) # 两个各自独有的数字
四 、字符编码理论
1.字符编码只针对文本数据
2.计算机存储数据的本质是二进制,因为计算机只认识0和1,在和计算机交互的时候,用的是我们能够读懂的语言
3.字符编码的发展史:
(1).一家独大
计算机是美国人发明的,由于计算机值认识0和1,于是定义了字符编码,但是只记录了英文字符与数字之间的对应关系,于是有了ASCII码,内部只记录英文字符和数字之间的对应关系
(2).群雄割据
越来越多国家使用计算机之后,各个国家都开发了属于自己国家的字符编码
中国:GBK编码,内部记录了中文字符,英文字符,和数字之间的对应关系,2bytes起步存储中文
韩国:Euc_kr码,内部记录了韩文字符、英文字符与数字之间的对应关系。
日本:shift_JTS码,内部记录了日文字符、英文字符与数字之间的对应关系。
(3).万国码:unicode,兼容各个国家的字符。原有的字符全部使用2bytes起步存储。
UTF家族,是针对unicode的优化版本,常用的是utf-8。英文1bytes存储,其它统一3bytes存储字符。
内存使用的是Unicode,硬盘使用utf8。
4.编码与解码
编码:将人类可以读懂的字符按照指定的编码形式转换成计算机能够读懂的语言(数字)。简记:人类的字符转换成计算机的字符。关键字:encode.
解码:将计算机能够读懂的语言按照指定的编码形式转换为人可以独懂得字符,关键字:decode