python基础知识(七)---数据类型补充、"雷区"、编码

mac2022-06-30  58

数据类型补充、"雷区"、编码

1.数据类型补充

str:
#字符串数据类型补充 s1=str(123) #常用于类型转换 print(s1) #capitalize()首字母大写 s='abc' s1=s.capitalize() print(s1) #title() 每个单词首字母大写, 需要被隔开 s2=s.title() print(s2) #count() 统计某个字符串出现的次数 s3=s.count('s') print(s3) #大小写转换 s4=s.swapcase() print(s4) #查找 s='alex taibai' s1=s.find('a') # 从左往右找, 只找到第一个. 查找不到的时候返回 -1 s2=s.index('a') # 查找不到用 ,报错 print(s1,s2) #center () 字符居中,长度20其他位置以*为填充 s1=s.center(20,'*') print(s1)
list:
#列表数据类型补充 li=list('123231122114') # 生成列表 ,常用语类型转换 print(li) #统计 print(li.count('1')) #反转 li.reverse() # 对列表容器操作 print(li) # 打印列表容器 #排序 li.sort() #升序 print(li) li.sort(reverse=True) #降序 print(li)
tuple:
# tu=tuple('1234123') # 定义元组 , 常用于数据转换 #统计 a=tu.count('1') print(a) #查找 print(tu.index('1'))
dict:
#dict dic=dict(k=1,k1=2,k2=3) # 一种定义方式 print(dic) #随机删除 dic1={'k1':'1','k2':'2','k3':'41'} dic1.popitem() #在python3.6版本 ,默认删除最后一个键值对 print(dic1) #批量创建字典,fromkeys第一个参数是可迭代对象, 第二个参数是value #fromkeys 是一个类方法,dict直接调用,生成一个新的字典 dic2=dict.fromkeys('123',[1]) dic2['1'][0]=2 # 此处有深浅拷贝的知识 print(dic2)
set:
#集合 s=set('1234') # 常用语类型转换 print(s)
数据类型转换:
#数据类型转换 ###str ---> int #必须是十进制的数字, 字符串中包含小数不能转换成int s='123' a=int(s)#必须是数字 ###str--->list li=list(s) print(li) s='abc' print(s.split()) ###list-->str li=['123'] s="".join(li) # join 不能有数字 print(s) ###list ->tuple li=[1,2,3] tu=tuple(li) print(tu) ###tuple--->list tu = (1,2,3) li = list(tu) print(li) ###set-->list s={1,2,3,4} print(list(s)) ###list-->set li=[1,2,3] s=set(li) print(s)

###数据类型转换总结

str -->数字 必须是数字数字 --->字符串 ,没要求列表转成字符串 ,join-->可迭代的对象中不能出现数字字符串转成列表 split除字典外 ,容器都数据类型可互相转换

#访问方式:

​ 直接访问: int ,bool,set

​ 顺序访问: list ,tuple,str

​ 通过key dict

2.以后会遇见的坑

删除列表的时候

​ 原因:在循环删除列表的元素,或者下标元素时. 列表内的索引会重新排列,方向从左向右.会导致删除不完全,或者是删的数据错误.

#提供两种方式删除 #方式一 倒着删除 , 从列表最后一个元素开始删除. #索引值是奇数的删除 li=[1,2,3,4,5] #方式一 倒着删 for i in range(len(li)-1,-1,-1): if i %2==1: li.pop(i) print(li) #方式二 引入新的列表, 循环新列表删除旧列表中的元素 li=[1,2,3,4,5] new_line=[] # 新列表 for i in li: if i%2==0: print(i) new_line.append(i) for j in new_line: li.remove(j) print(li) #推荐删除方式 dic={'a':'a','b':'b','c':'c'} new_line=[] for el in dic: if el=='a': new_line.append(el) for el2 in new_line: dic.pop(el2) print(dic)
字典for的时候怎么删除键值对

​ 原因:字典在循环遍历的时候不允许添加和删除,只能修改

#字典遍历中去删除 dic={'a':'a','b':'b','c':'c'} for el in dic: dic.pop(el) # 删除 dic['v']='v' # 添加 print(el) #? 都会报错: RuntimeError: dictionary changed size during iteration

3.编码的进阶

编码 (encode) 解码(decode) 转换成byte字节格式

​ python3内存中使用的是Unicode编码

​ python2内存使用的ASCII

#gbk编码 gbk解码 #中文2个字节 s='今天是个好日子' s1=s.encode('gbk') print(s1) s2=s1.decode('gbk') print(s2) #结果? b'\xbd\xf1\xcc\xec\xca\xc7\xb8\xf6\xba\xc3\xc8\xd5\xd7\xd3' 今天是个好日子 #**************************************# #utf-8编码, utf-8解码 #中文3个字节 s='进入新的世界' s1=s.encode('utf-8') print(s1) s2=s1.decode('utf-8') print(s2) #结果? b'\xe8\xbf\x9b\xe5\x85\xa5\xe6\x96\xb0\xe7\x9a\x84\xe4\xb8\x96\xe7\x95\x8c' 进入新的世界

#乱码问题

****用什么编码就用什么解码****

原因

​ gbk编码2个字节,utf-8中文3个字节

###utf-8不能解gbk的编码 s='你好' s1=s.encode('gbk') s2=s1.decode('utf-8') print(s2) #报错 ? " UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte " ###乱码 utf-8是2个字符6个字节 , 被gbk解成了3个字符6个字节, s='你好' s1=s.encode('utf-8') s2=s1.decode('gbk') print(s2) #乱码 ? 浣犲ソ
###图解释:?

转载于:https://www.cnblogs.com/dengl/p/11009220.html

最新回复(0)