Python之第七天的努力--基础数据类型补充,编码进阶
01 回顾
1.id == is
- == :数值是否相同
- is:内存地址
- id:获取对象的内存地址
2.代码块:一个文件,交互式命令一行就是一个代码块
3.同一代码块下缓存机制(字符串驻留机制):
- 所以数字,bool,几乎所有的字符串
- 优点:提升性能,节省空间
4.不同代码块的缓存机制(小数据池):在内存中开辟两个空间,一个空间储存-5~256的int,一个空间储存一定规则的字符串,如果你的代码中遇到了满足条件的数据,直接引用提前创建的。
- -5~256 int bool 满足一定规则的字符串
- 优点:提升性能,节省空间
5.集合:列表去重,关系测试 交并差。
6.深浅copy:
- 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面的所有元素与被copy对象的里面的元素公用一个。
- 深copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),里面的不可变数据沿用之前的,不可变数据类型创建新的。
02 基础数据类型补充
1.str
# str 补充 # s1 = ‘pyThon‘ # capitalize 首字母大写,其余变小写 # print(s1.capitalize()) # swapcase 大小写翻转 # print(s1.swapcase()) # title 每个单词的首字母大写 # msg = ‘zs say hi‘ # print(msg.title()) # center 居中 # s1 = ‘pyThon‘ # print(s1.center(20,‘*‘)) # find:通过元素找索引,找到第一个就返回,找不到返回-1 # index:通过元素找索引,找到第一个就返回,找不到 报错 # s1 = ‘pyThon‘ # print(s1.find(‘o‘)) # print(s1.index(‘a‘))
2.tuple
# tuple # 元组中只有一个元素,并且没有逗号,那么他就不是元组,它与该元素的数据类型一致。 # tu1 = (2) # print(tu1,type(tu1)) # tu2 = (‘hhh‘) # print(tu2,type(tu2)) # tu3 = (‘hhh‘,) # print(tu3,type(tu3)) # count # tu = (1,2,2,2,2,3,3,2,) # print(tu.count(2)) # index # tu = (‘zs‘,‘ls‘,‘ww‘) # print(tu.index(‘ww‘))
3.list
# list # count # index # l1 = [‘zs‘,‘ls‘,‘ww‘,‘kk‘] # print(l1.index(‘ww‘)) # sort ** # l1 = [5,4,3,7,8,6,1,9] # l1.sort() # 默认从小到大排序 # l1.sort(reverse=True) # 从大到小排序 # l1.reverse() # 反转 # print(l1) # 列表之间可以相加 # l1 = [1,2,3] # l2 = [1,2,3,‘zs‘,‘ls‘,‘ww‘] # print(l1 + l2) # 列表与数字相乘 # l1 = [1,‘hhh‘,3] # l2 = l1*3 # print(l2) l1 = [11,22,33,44,55] # 索引为奇数对应的元素删除(不能一个一个删除,此11只是例子,里面的元素未定) # 正常思路: # 先将所有索引整出来。 # 加以判断 # for index in range(len(l1)): # if index % 2 == 1: # l1.pop(index) # print(l1) # 列表的特性 错误 # 最简单 # del l1[1::2] # print(l1) # 倒序法删除 # for index in range(len(l1)-1,-1,-1): # if index % 2 == 1: # l1.pop(index) # print(l1) # 思维置换 # new_l1 = [] # for index in range(len(l1)): # if index % 2 == 0: # new_l1.append(l1[index]) # l1 = new_l1 # print(l1) # 循环一个列表时,最好不要改变列表的大小,这样会影响最后的结果
4.dict
# dict # updata **** # dic = {‘name‘:‘zs‘,‘age‘:18} # dic.update(hobby=‘魔方‘,hight=‘175‘) # 增加键值对 # dic.update(name=‘ls‘) # 修改 # dic.update([(1,‘a‘),(2,‘b‘),(3,‘c‘)]) # # print(dic) # dic1 = {‘name‘:‘zs‘,‘age‘:18,‘sex‘:‘male‘} # dic2 = {‘name‘:‘kk‘,‘weight‘:65} # dic1.update(dic2) # 更新 # print(dic1) # print(dic2)
5.formkeys
# fromkeys # dic = dict.fromkeys(‘abc‘,100) # {‘a‘: 100, ‘b‘: 100, ‘c‘: 100} # dic = dict.fromkeys([1,2,3],‘hhh‘) # {1: ‘hhh‘, 2: ‘hhh‘, 3: ‘hhh‘} # 坑:值共用一个 # dic = dict.fromkeys([1,2,3],[]) # dic[1].append(666) # {1: [666], 2: [666], 3: [666]} # print(dic) # dic = {‘k1‘:‘zs‘, ‘k2‘:‘ls‘, ‘k3‘:‘ww‘, ‘age‘:18} # 将字典中键含有‘k‘元素的键值对删除 # for key in dic: # if ‘k‘ in key: # dic.pop(key) # print(dic) # 报错 # 循环一个字典时,如果改变这个字典的大小,就会报错 # l1 = [] # for key in dic: # if ‘k‘ in key: # l1.append(key) # print(l1) # for i in l1: # dic.pop(i) # print(dic) # for key in list(dic.keys()): # if ‘k‘ in key: # dic.pop(key) # print(dic)
03 数据类型转换补充
# 0,‘‘,(),[],set(),None -----bool---False
04 编码的进阶
ASCLL码:包含英文字母,数字,特殊字符与01010101对应关系
a 01000001 一个字符一个字节表示
GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系
a 01000001 ascill码中的字符:一个字符一个字节表示
中 01001001 01000010 中文:一个字符两个字节表示
Unicode:包含全世界所有的文字与二进制0101001的对应关系
a 01000001 01000010 01000011 00000001
b 01000001 01000010 01100011 00000001
中 01001001 01000010 01100011 00000001
UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)
a 01000001 ascii码中的字符:一个字符一个字节表示。
To 01000001 01000010 (欧洲文字:葡萄牙,西班牙等)一个字符两个字节表示。
中 01001001 01000010 01100011 亚洲文字;一个字符三个字节表示。
- 不同的密码本之间能否互相识别?不能。
- 数据在内存中全部是以Unicode编码的。但是当数据用于网络传输或者储存到硬盘中,必须是以非Unicode编码(utf-8或gbk..)。
英文:
? str:‘hello’
? 内存中的编码方式:Unicode
? 表现形式:‘hello’
? bytes:
? 内存中的编码方式:非Unicode
? 表现形式:b‘hello’
中文:
? str:‘中国‘
? 内存中的编码方式:Unicode
? 表现形式:‘hello’
? bytes:
? 内存中的编码方式:非Unicode # Utf-8
? 表现形式:b‘\xe4\xb8\xad\xe5\x9b\xbd‘