基础数据类型补充二

1.今日内容大纲

  1. 昨日内容回顾
  2. 作业讲解
  3. 基础数据类型补充II
  4. 编码II

2.具体内容

1.昨日内容回顾

  • 集合

    可变的容器型的数据类型,要求里面的元素唯一的不可变的元素,它本身是可变的数据类型。

    1. 列表 去重。

    2. 关系测试。

      # 增 
      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进行转换。

看下面的图就行了!

img

[好文要顶](javascript:void(0)😉 [关注我](javascript:void(0)😉 [收藏该文](javascript:void(0)😉 [img](javascript:void(0)😉 [img](javascript:void(0)😉

img

太白*金星
关注 - 5
粉丝 - 2776

8

0

b1 = b'\xe5\xa4\xaa\xe7\x99\xbd123'

# 解码 unicode
s1 = b1.decode('utf-8')
# 编码 encode
b2 = s1.encode('gbk')
print(b2)

总结:

  1. 数据在内存中一定是unicode编码,如果需要网络传输或者存储到磁盘,必须转化成非unicode。
  2. 不同编码之间不能互相识别。
  3. 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)

总结:

  1. 数据在内存中一定是unicode编码,如果需要网络传输或者存储到磁盘,必须转化成非unicode。
  2. 不同编码之间不能互相识别。
  3. python中所有的数据都需要先转化成json字符串,然后在转化成bytes类型,网络发送或者文件存储。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值