PYTHON数据类型(进阶)
一、字符串、列表、字典、元祖、集合的补充
str
#captalize 首字母大写,其余小写 s1.capitalize() #swapcase 大小写翻转 s1.swapcase() #每个单词首字母大写 s1='hello say3you' s1.title()#you变成You #居中 s1.center(30) s1.center(20,'*') # 找索引 s1.find('a')#找到第一个返回,找不到返回-1 s1.index('b')#找到第一个返回,找不到报错
tuple
#(3)不是元祖,(3,)才是元祖,而list、dic单元素却不受影响 tu.index('aa') tu.count('2')
list
基本操作
#排序 l1.sort()#从小到大 l1.sort(reverse=True)#从大到小 l1.reverse()#反转 #相加 l1+l2 #与数字相乘 l1*3
删除
#这种删除并不能满足要求,循环删除过程已经改变列表元素序号 l1 = [11, 22, 33, 44, 55] for index in range(len(l1)): 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(必须是键值对),set也有update(迭代增加),list也有extend(迭代增加) dic = {'name': '老胡', 'age': 28} dic.update(hobby='美女', hight='175') dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')]) # 面试会考,列表内元祖对 dic.update(((1, 'a'),(2, 'b'),(3, 'c'),(5, 'd'))) #元祖内元祖对 #fromkeys的用法,就是from各种key而共用value dic = dict.fromkeys([1,2,3],[])#可迭代对象哦 dic[1].append(66)#所有value都会变,他们是连体的。
不要遍历字典过程中去改变字典的大小,会报错
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18} 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()): # ['k1', 'k2', 'k3','age'] if 'k' in key: dic.pop(key) print(dic)
各种“零”
#0,''(),[],{},set(),None ll=[0,'',(),[],{},set(),None] for list in ll: print(bool(list))
二、编码进阶
- 先给个报错
s1 =b'中国'
^
SyntaxError: bytes can only contain ASCII literal characters.
再明确几个计算机系统中的概念
当在文本框打字时,显示的是内存中的内容(unicode编码),当保存后,就是通过该软件编码后的数据(当然呈现在你面前是进过软件解码的)
python屏幕打印其实已经经过了IO操作了,也就是内存的数据已经写入pycharm并打印出来,也就是内存的数据经过utf-8编码并经过utf-8解码。所以!!!!!所有print(s),s是什么就打印什么
s1 = '中国' b1 = s1.encode('utf-8') # 编码 print(b1,type(b1)) #打印结果就是 b'\xe4\xb8\xad\xe5\x9b\xbd' print(s1)#打印结果就是中国
对于python中在字符前加b,例如b'hello',其实就是将其进行asicii编码,print时,进行asicii解码,所以能呈现b'hello'。而对于中文来说,b'中国'是错误的,因为不能进行ascii编码,而如2中例子中描述,解码时,byte类型解码通过acsii解不出,只能呈现b'\xe4\xb8\xad\xe5\x9b\xbd'
对于文件操作,必须制定编码,否则就按照windows默认编码gbk来。但是对于pycharm软件,我们打印时并没有制定编码,我认为,因为是在pychar软件内部操作,所以自动有编码和解码过程,例如
s='中古' print(s)#中国经历了utf-8编码写入pycharm,然后utf-8解码读出来,中国!!!