一、数据类型补充
主要针对之前学过的str、list、tuple、dict等进行补充。
-
数据类型方法补充
数据类型 方法 作用 字符串str s.capitalize() 首字母大写 s.title() 单词首字母大写 s.swapcase() 大小写互换 s.count("") 统计出现次数 s.find("") 查找索引,找不到返回-1 s.index("") 查找索引,找不到报错 列表list s = "拼接项".join(lst) 遍历列表,把列表中的每一项用“拼接项”做拼接,生成字符串 lst.count("查询的元素") 查询元素出现的次数 lst.index("") 查找 lst.sort() 升序排序 lst.reverse() 翻转 lst.sort(reverse=Ture) 降序 字典dict dic.popitem() 随机删 dic = dict.fromkeys( k , v ) 是一个类方法,用于创建新字典(通过第一个参数的迭代,与第二个参数组和成key:value),每一个value使用的是同一个内存地址 元组tuple tu.count("查询的元素") 查询元素出现的次数 tu.index("") 查找 -
数据类型转换
字符串 -- 数字:字符串中必须都是十进制的数字
数字 -- 字符串:直接转换
列表 -- 字符串:''.join() -- 可迭代的对象中不能出现数字
字符串 -- 列表:split
除字典外,容器数据类型之间可以直接相互转换
-
数据类型小结
int、str、bool、list、tuple、dict、set
有序的有:int、str、bool、list、tuple
无序的有:dict、set
可变的有:list、dict、set
不可变的有:int、str、bool、tuple
访问方式:直接访问:int、bool、set
顺序访问:str、list、tuple
通过键访问:dict
二、常见的坑
-
循环删除索引的时候,要倒序删除 否则会报错,或者结果不正确
索引值是奇数的删除 li = [1,2,3,4] for i in range(4): if i % 2 == 1: li.pop(i) #会报错 print(li) li = [1,2,3,4,5] #[1,3,4,5] for i in range(4): if i % 2 == 1: li.pop(i) #结果不对 print(li) li = [1,2,3,4,5] for i in range(len(li)-1,-1,-1): if i % 2 == 1: li.pop(i) #倒序删除 del li[i]也可以 print(li) li = [1,2,3,4,5] #添加新列表,循环新列表删除就列表 new_li = [] for i in range(len(li)): if i % 2 == 1: new_li.append(li[i]) for em in new_li: li.remove(em) print(li) li = [1,2,3,4,5] del li[1::2] print(li)
-
循环添加列表元素的时候,会形成死循环
li = [1,2,3,4] for i in li: li.append(i) print(li)
-
字典再循环的时候不能改变字典的大小
dic = {"k1":"v1","k2":"v2","k3":"v3"} for i in dic: dic["k7"] = "1" #会报错 print(dic) li = [] #先定义一个列表 循环列表列表删除字典 for i in dic: if i == "k1" or i == "k3": li.append(i) for em in li: dic.pop(em) print(dic)
三、编码与解码
- 编码与解码(encode和decode)
unicode => utf-8
s = "刘伟很皮" # 12个字节
abc = s.encode("UTF-8") # encode之后的结果是bytes类型 依然是原来的字符串
print(abc)
utf-8 => unicode
abc = b'xe5x88x98xe4xbcx9fxe5xbex88xe7x9axaf'
s = abc.decode("UTF-8") # 解码。 用什么编码, 就用什么解码
print(s)
结论:用什么编码集编码, 就用什么编码集解码