1.今日内容大纲
- 昨日内容回顾
- 作业讲解
- 基础数据类型补充II
- 编码II
2.具体内容
1.昨日内容回顾
-
集合
可变的容器型的数据类型,要求里面的元素唯一的不可变的元素,它本身是可变的数据类型。
-
列表 去重。
-
关系测试。
# 增 add update # 删 remove pop clear del # 改 先删除后增加 #查 for循环 # 交集 & # 并集 | # 差集 - #反差集 ^ # 子集 < # 超集 > # 冻集合 frozenset
-
-
str
captilize center find index islower isupper lstrip rstrip rsplit swapcase title
-
list,tuple
index count sort 升序 sort(reverse=True) 降序 reverse() 倒序(翻转)
坑:在循环一个列表时,不要改变此列表的大小,否则结果会有影响。
-
dict
坑:在循环一个字典时,不要改变此字典的大小,否则会报错。
dict.fromkeys([1,2,3],'value')
2.作业讲解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EV1FbAzq-1600680348243)(E:\19级人工智能\19级人工智能 02班\day09\image-20200916150209906.png)]
# import copy
#
# v1 = [1, 2, 3, {"name": '太白', "numbers": [7, 77, 88]}, 4, 5]
#
# v2 = copy.deepcopy(v1) # 深copy
# # [1, 2, 3, {"name": '太白', "numbers": [7, 77, 88]}, 4, 5]
# print(v1 is v2) # False
#
# print(v1[0] is v2[0]) # True
# print(v1[3] is v2[3]) # False
#
# print(v1[3]['name'] is v2[3]['name']) # True
# print(v1[3]['numbers'] is v2[3]['numbers']) # False
# print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) # True
# [['_','_','_'],['_','_','_'],['_','_','_']]
# v1 = ['_','_','_']
# v2 = [v1,v1,v1,v1,v1]
# l1 = []
# for i in range(3):
# l1.append(['_']*3)
# print(l1)
#
# 用户输入一个数字,判断一个数是否是水仙花数。
#
# 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数,
#
# ```
# 例如: 153 =1**3 + 5**3 + 3**3
# ```
# while 1:
# num = input('>>>')
# res = 0
# if not num.isdecimal():
# print('要输入数字')
# continue
# for i in num:
# res += int(i)**3
# if res == int(num):
# print('是水仙花数')
# break
# else:
# print('No')
"""
车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (**选做题**)
cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041']
locals = {'沪':'上海', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南'}
结果: {'⿊⻰江':2, '⼭东': 1, '北京': 1}
"""
# {'⿊⻰江':2, '⼭东': 1, '北京': 1}
# 拓展性指的是:结果字典的键值对是动态生成,而不是提前创建。
# 结果是上面的字典,字典的键是省份名称,就要找到locals的相关的值,然后
# 要找到对应的键,键从哪里来?从cars所有的车牌数据中得来。
# 字典的值是具体的车牌数量,所以我们也要循环cars.
cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪B25041']
locals = {'沪':'上海', '⿊':'⿊⻰江', '京':'北京','鲁':'⼭东', '鄂':'湖北', '湘':'湖南'}
res = {}
# 方法一:
# 如果一个字典中没有目标键值对,则添加一个,否则进行相应的操作。
# for car in cars:
# if '山东' not in cars:
# res['山东'] = 1
# else:
# res['山东'] += 1
# for car in cars:
# if locals[car[0]] not in res:
# res[locals[car[0]]] = 1
# else:
# res[locals[car[0]]] += 1
# print(res)
# 方法二
for car in cars:
res[locals[car[0]]] = res.get(locals[car[0]],0) + 1
3.基础数据类型补充II
-
int str bool 三者转换
-
str list 转换
str ---> list split 分割 list ---> str join 联合
-
tuple list
-
set list
-
所有的数据类型转化成bool值
# 转化成bool值为False的所有的数据类型 '',0,[],{},set(),(),None
-
str 与 bytes之间的转化。
-
数据类型的分类
容器型与非容器型,可变与不可变。
4.编码II
什么是编码?
编码:存储的是二进制与文字之间的关系。
ASCII:存储的数字字母特殊字符与二进制的对应关系。
a: 0001 0001 一个字节表示一个字符
GBK: 国标,每个国家都有自己的GBK,以中国举例:包含中文以及ascii码所有的内容与二进制的对应关系。
a: 0001 0001 一个字节表示一个字符
中:0001 0001 0001 0001 两个字节表示一个字符
Unicode: 万国码,与全世界所有的编码本都有关系,记录的所有的文字与二进制的对应关系
a: 0001 0001 0001 0001 0001 0001 0001 0001四个字节表示一个字符
中:0001 0001 0001 0001 0001 0001 0001 0001 四个字节表示一个字符
UTF-8: 最少用8位一个字节表示一个字符。
a: 0001 0001 一个字节表示一个字符
欧洲:0001 0001 0001 0001 两个字节表示一个字符
亚洲:0001 0001 0001 0001 0001 0001 三个字节表示一个字符
前提1:所有的数据在内存中都是Unicode编码, 当需要将数据保存到硬盘或者需要网络传输的时候,就转换为非Unicode编码比如:UTF-8编码。
前提2:不同的编码之间肯定不能互相识别
python中的数据如何进行编解码。
# 运行此文件,python解释器帮我们实现了将这些数据加载到内存转化成unicode以及运行
# 完毕之后,保存到磁盘转化成utf-8的过程。
# l1 = [1, 2, 3]
# s1 = 'barry'
# i1 = 100
# 以后只有网络传输时,需要我们手动的编码数据或者解码数据,
# 文件存储的时候,open函数已经帮我们处理了。
python中的所有的数据类型,dict,list,str,int等等都不能直接进行网络传输,必须都要转化成一个特殊的字符串(json字符串),然后在转化成bytes类型才可以发送。
bytes类型是python中的基础数据类型之一,字节文本,与字符串类型非常相似。
bytes类型内部的编码方式为非Unicode.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8ojOX6j-1600680348245)(E:\19级人工智能\19级人工智能 02班\day09\image-20200916163052865.png)]
# bytes
# s1 = 'barry' # 编码方式 unicode
#
# # b1 = s1.encode('utf-8') # encode 编码
# # # unicode编码与utf-8 bytes类型的转换
# # print(b1)
#
# b2 = b'barry'
# # print(b2.capitalize())
# print(b2.decode('utf-8')) # decode 解码
# 由于中文的关系,bytes类型与str必须同时存在
# s1 = '太白123'
# b1 = s1.encode('utf-8')
# b1 = s1.encode('gbk')
# print(b1)
需求:utf-8的bytes的数据,转化成gbk的bytes的数据。
上面我说了,不同编码之间是不能直接互相是别的,这里说了不能直接,那就可以间接,如何间接呢? 现存世上的所有的编码都和谁有关系呢? 都和万国码Unicode有关系,所以需要借助Unicode进行转换。
看下面的图就行了!
[好文要顶](javascript:void(0)😉 [关注我](javascript:void(0)😉 [收藏该文](javascript:void(0)😉 [](javascript:void(0)😉 [
](javascript:void(0)😉
8
0
b1 = b'\xe5\xa4\xaa\xe7\x99\xbd123'
# 解码 unicode
s1 = b1.decode('utf-8')
# 编码 encode
b2 = s1.encode('gbk')
print(b2)
总结:
- 数据在内存中一定是unicode编码,如果需要网络传输或者存储到磁盘,必须转化成非unicode。
- 不同编码之间不能互相识别。
- python中所有的数据都需要先转化成json字符串,然后在转化成bytes类型,网络发送或者文件存储。
in-xin/followers/)
8
0
b1 = b'\xe5\xa4\xaa\xe7\x99\xbd123'
# 解码 unicode
s1 = b1.decode('utf-8')
# 编码 encode
b2 = s1.encode('gbk')
print(b2)
总结:
- 数据在内存中一定是unicode编码,如果需要网络传输或者存储到磁盘,必须转化成非unicode。
- 不同编码之间不能互相识别。
- python中所有的数据都需要先转化成json字符串,然后在转化成bytes类型,网络发送或者文件存储。