数据类型
按存储空间来分
数字
字符串
集合:无序,没有索引相关信息
元祖:有序,有索引相关信息,不可变
列表:有序,有索引相关信息,可变,可以处理数据的增删改
字典:无需,要存key与value映射的相关信息,可变,可以处理数据的增删改
字符串
按索引取值(正向取+反向取) :只能取 切片(顾头不顾尾,步长)
移除空白strip 切分split
循环
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
#strip
name='**zhu**' print(name.strip('*')) #去掉* print(name.lstrip('*')) #只去掉左边* print(name.rstrip('*')) #只去掉右边* #startswith,endswith name='zhu_zzz' print(name.endswith('zzz')) #从尾部匹配zzz print(name.startswith('zhu')) #从首部匹配zhu #replace name='my name is zhu,zhu has a goodface' print(name.replace('zhu','zzz',1)) #zhu替换成zzz,只替换第一个zhu #format的三种玩法 res='{} {} {}'.format('zhu',18,'male') #egon 18 male res='{1} {0} {1}'.format('zhu',18,'male') #18 egon 18 res='{name} {age} {sex}'.format(sex='male',name='zhu',age=18) #egon 18 male #find,rfind,index,rindex,count name='zhu say hello' print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引 # print(name.index('e',2,4)) #同上,但是找不到会报错 print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有 #split name='root:x:0:0::/root:/bin/bash' print(name.split(':')) #默认分隔符为空格 name='C:/a/b/c/d.txt' #只想拿到顶级目录 print(name.split('/',1)) name='a|b|c' print(name.rsplit('|',1)) #从右开始切分 #join tag=' ' print(tag.join(['zhu','say','hello','world'])) #可迭代对象必须都是字符串 #center,ljust,rjust,zfill name='zhu' print(name.center(30,'-')) #zhu居中,左右两边-填充,宽度30 print(name.ljust(30,'*')) #左边zhu,右边被*填充,宽度30 print(name.rjust(30,'*')) #右边zhu,左边被*填充,宽度30 print(name.zfill(50)) #用0填充,宽度50 #expandtabs name='zhu\t123' print(name) print(name.expandtabs(1)) #zhu和123之间加tab,宽度1 #lower,upper name='zhu' print(name.lower()) #全小写 print(name.upper()) #全大写 #captalize,swapcase,title print(name.capitalize()) #首字母大写 print(name.swapcase()) #大小写翻转 msg='zhu say hi' print(msg.title()) #每个单词的首字母大写 #is数字系列 #在python3中 num1=b'4' #bytes num2=u'4' #unicode,python3中无需加u就是unicode num3='四' #中文数字 num4='Ⅳ' #罗马数字 #isdigt:bytes,unicode print(num1.isdigit()) #True print(num2.isdigit()) #True print(num3.isdigit()) #False print(num4.isdigit()) #False #isdecimal:uncicode #bytes类型无isdecimal方法 print(num2.isdecimal()) #True print(num3.isdecimal()) #False print(num4.isdecimal()) #False #isnumberic:unicode,中文数字,罗马数字 #bytes类型无isnumberic方法 print(num2.isnumeric()) #True print(num3.isnumeric()) #True print(num4.isnumeric()) #True #三者不能判断浮点数 num5='4.3' print(num5.isdigit()) print(num5.isdecimal()) print(num5.isnumeric()) ''' 总结: 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景 如果要判断中文数字或罗马数字,则需要用到isnumeric ''' #is其他 print('===>') name='zhu123' print(name.isalnum()) #字符串由字母或数字组成True print(name.isalpha()) #字符串只由字母组成False print(name.isidentifier()) #True print(name.islower()) #True print(name.isupper()) #False print(name.isspace()) #False print(name.istitle()) #False |
列表
#优先掌握的操作:
按索引存取值(正向存取+反向存取):即可存也可以取
切片(顾头不顾尾,步长)
长度
成员运算in和not in
追加 删除 循环
元祖
#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
#定义:与列表类型比,只不过[]换成()
age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))
#优先掌握的操作:
按索引取值(正向取+反向取):只能取
切片(顾头不顾尾,步长)
长度
成员运算in和not in
循环
字典
#优先掌握的操作:
按key存取值:可存可取
长度len
成员运算in和not in
删除 键keys(),值values(),键值对items()
循环
集合
#作用:去重,关系运算,
#定义集合:
集合:可以包含多个元素,用逗号分割,
集合的元素遵循三个原则:
1:每个元素必须是不可变类型(可hash,可作为字典的key)
2:没有重复的元素
3:无序
注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
#优先掌握的操作:
长度len
成员运算in和not in
|合集
&交集
-差集
^对称差集
==
>,>= ,<,<= 父集,子集
字符编码
计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是同样的道理。结论:计算机只认识数字
很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?
必须经过一个过程:
字符--------(翻译过程)------->数字
这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码
以下两个场景下涉及到字符编码的问题:
1. 一个python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(python文件并未执行,前两个阶段均属于该范畴)
2. python中的数据类型字符串是由一串字符组成的(python文件执行时,即第三个阶段)
练习
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
name = " aleX"
# 1) 移除 name 变量对应的值两边的空格,并输出处理结果 print(name.strip()) # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果 print(name.startswith('al')) False # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 print(name.endswith('X')) True # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 print(name.replace('l','p',1)) # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。 print(name.split('l')) # 6) 将 name 变量对应的值变大写,并输出结果 print(name.upper()) # 7) 将 name 变量对应的值变小写,并输出结果 print(name.lower()) # 8) 请输出 name 变量对应的值的第 2 个字符? print(name[2:3]) # 9) 请输出 name 变量对应的值的前 3 个字符? print(name[1:4]) # 10) 请输出 name 变量对应的值的后 2 个字符? print(name[4:2:-1]) # 11) 请输出 name 变量对应的值中 “e” 所在索引位置? print(name.find('e',3,4)) # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。 print(name[0:4]) 输出结果: aleX False True apeX [' a', 'eX'] ALEX alex l ale Xe 3 ale |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#1. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
data=['alex',49,[1900,3,18]] print(data[0]) print(data[1]) print(data[2][0]) print(data[2][1]) print(data[2][2]) 测试结果: alex 49 1900 3 18 #2. 用列表模拟队列 a=[] a.append('1') print(a) a.append('2') print(a) a.append('3') print(a) a.pop(0) print(a) a.pop(0) print(a) # 输入结果: ['1'] ['1', '2'] ['1', '2', '3'] ['2', '3'] ['3'] #3. 用列表模拟堆栈 a=[] a.append('1') print(a) a.append('2') print(a) a.append('3') print(a) a.pop(-1) print(a) a.pop(-1) print(a) 测试结果: ['1'] ['1', '2'] ['1', '2', '3'] ['1', '2'] ['1'] #4. 有如下列表,请按照年龄排序(涉及到匿名函数) l=[ {'name':'alex','age':84}, {'name':'oldboy','age':73}, {'name':'egon','age':18}, ] print(sorted(l,key=lambda a:a['age'])) #http://www.cnblogs.com/zle1992/p/6271105.html |