1.编码转换:
ASCII:最早的编码
GBK:中文国标码,包含了ASCII编码.
UNICODE:万国码,包含了ASCII
utf-8:可变纬度的万国码,是unicode的一种实现
综上:除了ASCII码以外,其他信息不能直接转换.
unicode是万国码,什么内容都可以进行显示,那么数据传输和存储的时候由于unicode比较浪费空间和资源.需要把unicode转存成utf-8或者GBK进行存储.
在python中的转换过程:
把文字信息进行编码,编码之后的内容就可以进行传输了.编码之后的数据是bytes类型的数据.
数据还是原来的,只是表现形式发生了变化.
bytes的表现形式:
1. 英文: b' alex' 英文的表现形式和字符串没什么两样
2.中文: b'xe4xb8xad' 这是一个汉字的utf-8的bytes表现形式
英文的编码:
s = "alex" print(s.encode("utf-8")) print(s.encode("GBK"))
结果:
b'alex'
b'alex'
中文的编码:
s = "猪蹄" print(s.encode("utf-8")) print(s.encode("GBK"))
结果:
b'xe7x8cxaaxe8xb9x84'
b'xd6xedxccxe3'
####英文的编码之后的结果和原字符串一样,中文的编码之后的结果根据编码的不同,结果也不同
编码和解码:
编码和解码的时候必须都需要一样的格式.
s = "zz" s1 = s.encode("GBK") s2 = s1.decode("utf-8") print(s2)
结果:
zz
2.基础数据类型补充
lst = [1,2,3,4,5,6] for i in lst: lst.append(7) # 这样写法就会一直持续添加7 print(lst) print(lst)
列表:循环删除列表中的每一个元素
li = [ 11,22, 33, 44] for i in li: li.remove(i) print(li)
结果:
[22, 44]
for运行过程中,循环进行到下标[0]也就是11时,remove i 也就是删除掉11,后面的元素自动向前挪一位,下标变成减一,再次循环是是下标[1]的元素33此时remove删除的就是33.
正确的做法:
li = [11, 22, 33, 44] for i in range(len(li)): li.pop() print(li)
结果:
[]
由于删除元素会改变元素的索引,所以容易出问题,尽量不要在循环中直接删除元素,可以吧要删除的元素放到另一个集合再进行批量删除
dict中的fromkey(),可以帮我们通过list来创建一个list:
dic = dict.fromkeys(["周杰伦","马化腾"],["jj","gg"]) print(dic)
结果:
{'周杰伦': ['jj', 'gg'], '马化腾': ['jj', 'gg']}
dict.fromkIeys第一个是指的字典的键,第二个指的是字典的值.
dic = {'k1': 'alex', 'k2': 'wusir', 's1': '金老板'} dic_del_list = [] for i in dic: if 'k' in i: dic_del_list.append(k) for el in dic_del_list: del dic[el] print(dic)
字典中的元素在迭代过程中是不允许进行删除的
要把要删除的元素暂时保存到第二个list中,然后循环list,再删除
类型转换:
元组 => 列表 list(tuple)
列表 => 元组 tuple(list)
list=>str str.join(list)
str=>list str.split()
转换成False的数据:
0,'',None,[],(),{},set() ==> False
深浅拷贝:
浅拷贝:只会拷贝第一层,第二层的内容不会拷贝.
深拷贝:把元素内部的元素完全进行拷贝复制. 不会产其中一个个改变另一个跟着改变的问题