python基础数据类型补充以及编码进阶
01 内容大纲
- 基础数据类型的补充
- 数据类型之间的转换
- 编码的进阶
02 具体内容:
-
数据类型的补充:
-
str
# str :补充的方法练习一遍就行。 s1 = 'taibai' # capitalize 首字母大写,其余变小写 print(s1.capitalize()) # swapcase 大小写翻转 print(s1.swapcase()) # title 每个单词的首字母大写 msg= 'taibai say3hi' print(msg.title()) s1 = 'barry' # center 居中:内同居中,总长度,空白处填充 print(s1.center(20)) print(s1.center(20,'*')) ##寻找字符串中的元素是否存在 # find :通过元素找索引,找到第一个就返回,找不到 返回-1 # index:通过元素找索引,找到第一个就返回,找不到 报错 print(s1.find('a')) print(s1.find('r')) print(s1.find('o')) print(s1.index('o'))
-
元组
# tuple 元组中如果只有一个元素,并且没有逗号,那么它不是元组,它与该元素的数据类型一致。 ***【重点】 tu1 = (2,3,4) tu1 = (2) tu1 = ('太白') tu1 = ([1,2,3]) tu1 = (1,) print(tu1,type(tu1)) # # count 计数 获取某元素在列表中出现的次数 tu = (1,2,3,3,3,2,2,3,) print(tu.count(3)) # # index 通过元素找索引(可切片),找到第一个元素就返回,找不到该元素即报错。 tu = ('太白', '日天', '太白') print(tu.index('太白'))
-
列表
# count 统计某个元素在列表中出现的次数 a = ["q","w","q","r","t","y"] print(a.count("q")) # index l1 = ['太白', '123', '女神', '大壮'] print(l1.index('大壮')) # sort **【重点】用于在原位置对列表进行排序 l1 = [5, 4, 3, 7, 8, 6, 1, 9] l1.sort() # 默认从小到大排序 l1.sort(reverse=true) # 从大到小排序 ** # reverse **【重点】将列表中的元素反向存放 l1.reverse() # 反转 print(l1) # 列表可以相加 l1 = [1, 2, 3] l2 = [1, 2, 3, '太白', '123', '女神'] print(l1 + l2) # 列表与数字相乘 l1 = [1, 'daf', 3] l2 = l1*3 print(l2) 循环列表,改变列表大小的问题: l1 = [11, 22, 33, 44, 55] # 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。 # *** 重要 # 正常思路: # 先将所有的索引整出来。 # # 加以判断,index % 2 == 1: pop(index) # for index in range(len(l1)): # if index % 2 == 1: # l1.pop(index) # print(l1) ## 最简单的: l1 = [11, 22, 33, 44, 55] del l1[1::2] #切片步长删除 print(l1) ## 倒序法删除元素 l1 = [11, 22, 33, 44, 55] for index in range(len(l1)-1,-1,-1): if index % 2 == 1: l1.pop(index) print(l1) # 思维置换:把索引为偶数的元素添加到一个新列表,在赋值给原列表 l1 = [11, 22, 33, 44, 55] new_l1 = [] for index in range(len(l1)): if index % 2 ==0: new_l1.append(l1[index]) l1 = new_l1 print(l1) #注意: 循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果。
-
字典
# 字典的补充: # update *** dic = {'name': '太白', 'age': 18} #增: dic.update(hobby='运动', hight='175') #改: dic.update(name='太白金星') ## 面试会考 dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')]) print(dic) # 更新,有则覆盖,无则添加 dic1 = {"name":"jin","age":18,"sex":"male"} dic2 = {"name":"alex","weight":75} dic1.update(dic2) print(dic1) # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75} print(dic2) # fromkeys 创建一个字典:字典的所有键来自一个可迭代对象,字典的值使用同一个值 dic = dict.fromkeys('abc', 100) dic = dict.fromkeys([1, 2, 3], 'alex') # 坑:值共用一个,面试题 dic = dict.fromkeys([1,2,3],[]) dic[1].append(666) print(dic) 循环字典,改变字典大小的问题: dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18} # 将字典中键含有'k'元素的键值对删除。 #错误做法: # for key in dic: # if 'k' in key: # dic.pop(key) # print(dic) # 循环一个字典时,如果改变这个字典的大小,就会报错。--->循环一个列表,然后对字典进行修改 #1: l1 = [] for key in dic: if 'k' in key: l1.append(key) print(l1) for i in l1: dic.pop(i) print(dic) #2: for key in list(dic.keys()): # ['k1', 'k2', 'k3','age'] if 'k' in key: dic.pop(key) print(dic)
-
-
数据类型的转换
int bool str 三者转换
-
str list 两者转换
# str ---> list s1 = 'alex 太白 武大' print(s1.split()) # ['alex', '太白', '武大'] # list ---> str # 前提 list 里面所有的元素必须是字符串类型才可以 l1 = ['alex', '太白', '武大'] print(' '.join(l1)) # 'alex 太白 武大'
-
list set 两者转换
# list ---> set s1 = [1, 2, 3] print(set(s1)) # set ---> list set1 = {1, 2, 3, 3,} print(list(set1)) # [1, 2, 3]
-
str bytes 两者转换
# str ---> bytes s1 = '太白' print(s1.encode('utf-8')) # b'\xe5\xa4\xaa\xe7\x99\xbd' # bytes ---> str b = b'\xe5\xa4\xaa\xe7\x99\xbd' print(b.decode('utf-8')) # '太白'
-
所有数据都可以转化成bool值
转化成bool值为false的数据类型有:'', 0, (), {}, [], set(), none
-
数据类型的分类(了解)
-
编码的进阶
- ascii码:包含英文字母,数字,特殊字符与01010101对应关系。
a 01000001 一个字符一个字节表示。
- gbk:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。
a 01000001 ascii码中的字符:一个字符一个字节表示。
中 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
表现形式:'中国'
bytes :
内存中的编码方式: 非unicode # utf-8
表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd'
注意:bytes类型也是python基础数据类型之一。bytes是非unicode编码的数据类型,除此之外,python中所有数据类型的编码均为unicode编码。
bytes类型也称作字节文本,他的主要用途就是网络的数据传输,与数据存储。
# str ---> bytes (unicode ---> 非unicode) s1 = '中国' b1 = s1.encode('utf-8') # 编码 print(b1,type(b1)) # b'\xe4\xb8\xad\xe5\x9b\xbd' b1 = s1.encode('gbk') # 编码 # b'\xd6\xd0\xb9\xfa' <class 'bytes'> # bytes---->str (非unicode ---> unicode) b1 = b'\xe4\xb8\xad\xe5\x9b\xbd' s2 = b1.decode('utf-8') # 解码 print(s2)
# gbk ---> utf-8 b1 = b'\xd6\xd0\xb9\xfa' s = b1.decode('gbk') print(s) b2 = s.encode('utf-8') print(b2) # b'\xe4\xb8\xad\xe5\x9b\xbd' # utf-8 ---> gbk b1 = b'\xe4\xb8\xad\xe5\x9b\xbd' s = b1.decode('utf-8') print(s)#中国 b2 = s.encode('gbk') print(b2) # b'\xd6\xd0\xb9\xfa'
03 总结
- 数据类型的补充: list(sort,revrse,列表的相加,乘,循环问题),dict (update 循环问题) 【重点】***
-
编码的进阶:
- bytes为什么存在?
- str --->bytes
- gbk <-----> utf-8
上一篇: 版本控制git之五-标签管理 tags 标签 代码版本 如: v1.0
下一篇: Admin站点