Python自动化开发课堂笔记【Day02】 - Python基础(数据类型详解)
ASCII、Unicode、GBK和UTF-8字符编码的区别联系
ASCII编码:用来表示英文字符,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。
Unicode编码:使用至少2个字节来表示字符,可以表示世界上所有的字符,是一个字符集。
UTF-8:是Unicode字符的实现方式之一(对Unicode的压缩),它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。
GBK/GB2312/GB18030:使用两个字节,表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。
各种进制的表示方式:
二进制 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | - | - | - | - | - |
八进制 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 010 | 011 | 012 | - | - | - | - | - |
十进制 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | - | - | - | - | - |
十六进制 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
基本数据类型
1. 整型(int)
需要了解如何将十进制整型数据转化为其它进制的数据的方法
i. 统计将数字转化为二进制后所需要的位数
age = 8 # 二进制1000 print(age.bit_length()) #结果为4
ii. 将数字转化为十六进制的表示方式
age = 15 v = age.to_bytes(10,byteorder='big') print(v) # b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f' --> 15的十六进制表示为0f,big为指定从左侧补0,第一个参数10表示用是个字节表示 v = age.to_bytes(10,byteorder='little') print(v) # b'\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' --> little为指定从右侧补0
2. 布尔值(boolean)
布尔值为False的主要有以下几种情况
b = 0
b = ''
b = []
b = {}
b = ()
b = False
其他值均可视为True,注意!!布尔值只有0和1,也就是True和False,如果有b=11,只能说它的布尔值表现形式为True,而不是说该值本身为真值,它需要经过布尔函数的处理才能表现出真值的形式
3. 字符串(string)
字符串拥有的方法非常之多,近乎涵盖对字符串的任何操作
str.upper() | str.lower() | str.splite() | str.find() | str.strip() | str.capitalize() | str.center() |
str.startswith() | str.endswith() | str.format() | str.replace() | join() | str.casefold() | str.count() |
1 # name = 'alex' # str类的对象 2 # 1. capitalize 字符串首字母大写 3 # 自身不变,会生成一个新的值 4 # v = name.capitalize() # 自动找到name关联的str类,执行其中的capitalize技能 5 # print(name) 6 # print(v) 7 8 # 2. 将所有大小变小写,casefold牛逼,德语... 9 # name = 'AleX' 10 # v = name.casefold() # 跟牛逼,德语... 11 # print(name) 12 # print(v) 13 14 # 3. 将所有大小变小写 15 # name = 'AleX' 16 # v = name.lower() 17 # print(v) 18 19 # 4. 文本居中 20 # 参数1: 表示总长度 21 # 参数2:空白处填充的字符(长度为1) 22 # name = 'alex' 23 # v = name.center(20) 24 # print(v) 25 # v = name.center(20,'行') 26 # print(v) 27 28 # 5. 表示传入之在字符串中出现的次数 29 # 参数1: 要查找的值(子序列) 30 # 参数2: 起始位置(索引) 31 # 参数3: 结束位置(索引) 32 # name = "alexasdfdsafsdfasdfaaaaaaaa" 33 # v = name.count('a') 34 # print(v) 35 # v = name.count('df') 36 # print(v) 37 38 # v = name.count('df',12) 39 # print(v) 40 # v = name.count('df',0,15) 41 # print(v) 42 43 # 6. 是否以xx结尾 44 # name = 'alex' 45 # v1 = name.endswith('ex') 46 # print(v1) 47 48 # 7. 是否以xx开头 49 # name = 'alex' 50 # v2 = name.startswith('al') 51 # print(v2) 52 53 # 8. encode欠 54 55 # 9. 找到制表符\t,进行替换(包含前面的值) 56 # PS: \n 57 # name = "al\te\tx\nalex\tuu\tkkk" 58 # v = name.expandtabs(20) 59 # print(v) 60 61 # 10. 找到指定子序列的索引位置:不存在返回-1 62 # name = 'alex' 63 # v = name.find('o') 64 # print(v) 65 # v = name.index('o') 66 # print(v) 67 68 # 11.字符串格式化 69 70 # tpl = "我是:%s;年龄:%s;性别:%s" 71 72 # tpl = "我是:{0};年龄:{1};性别:{2}" 73 # v = tpl.format("李杰",19,'都行') 74 # print(v) 75 76 # tpl = "我是:{name};年龄:{age};性别:{gender}" 77 # v = tpl.format(name='李杰',age=19,gender='随意') 78 # print(v) 79 80 # tpl = "我是:{name};年龄:{age};性别:{gender}" 81 # v = tpl.format_map({'name':"李杰",'age':19,'gender':'中'}) 82 # print(v) 83 84 85 # 12. 是否是数字、汉子. 86 # name = 'alex8汉子' 87 # v = name.isalnum() # 字,数字 88 # print(v) # True 89 # v2 = name.isalpha()# 90 # print(v2)# False 91 92 # 13. 判断是否是数字 93 # num = '②' 94 # v1 = num.isdecimal() # '123' 95 # v2 = num.isdigit() # '123','②' 96 # v3 = num.isnumeric() # '123','二','②' 97 # print(v1,v2,v3) 98 99 100 # 14. 是否是表示符 101 # n = 'name' 102 # v = n.isidentifier() 103 # print(v) 104 105 # 15.是否全部是小写 106 # name = "ALEX" 107 # v = name.islower() 108 # print(v) 109 # v = name.isupper() 110 # print(v) 111 112 # 16,.全部变大写, 113 # name = 'alex' 114 # v = name.upper() # lower() 115 # print(v) 116 117 # 17.是否包含隐含的xx 118 # name = "钓鱼要钓刀鱼,\n刀鱼要到岛上钓" 119 # v = name.isprintable() 120 # print(v) 121 122 123 # 18.是否全部是空格 124 # name = ' ' 125 # v = name.isspace() 126 # print(v) 127 128 129 130 # 19.元素拼接(元素字符串) ***** 131 # name = 'alex' 132 133 # v = "_".join(name) # 内部循环每个元素 134 # print(v) 135 136 # name_list = ['海峰','杠娘','李杰','李泉'] 137 # v = "搞".join(name_list) 138 # print(v) 139 140 # 20. 左右填充 141 # center,rjust,ljust 142 # name = 'alex' 143 # v = name.rjust(20,'*') 144 # print(v) 145 146 147 # 21. 对应关系 + 翻译 148 # m = str.maketrans('aeiou','12345') # 对应关系 149 # 150 # name = "akpsojfasdufasdlkfj8ausdfakjsdfl;kjer09asdf" 151 # v = name.translate(m) 152 # print(v) 153 154 # 22. 分割,保留分割的元素 155 # content = "李泉SB刘康SB刘一" 156 # v = content.partition('SB') # partition 157 # print(v) 158 159 # 23. 替换 160 # content = "李泉SB刘康SB刘浩SB刘一" 161 # v = content.replace('SB','Love') 162 # print(v) 163 # v = content.replace('SB','Love',1) 164 # print(v) 165 166 # 24,移除空白,\n,\t,自定义 167 # name = 'alex\t' 168 # v = name.strip() # 空白,\n,\t 169 # print(v) 170 171 # 25. 大小写转换 172 # name = "Alex" 173 # v = name.swapcase() 174 # print(v) 175 176 # 26. 填充0 177 # name = "alex" 178 # v = name.zfill(20) 179 # print(v) 180 181 # v1 = 'alex' 182 # v2 = 'eric' 183 # 184 # v = v1 + v2 # 执行v1的__add__功能 185 # print(v) 186 187 188 ###### 字符串功能总结: 189 # name = 'alex' 190 # name.upper() 191 # name.lower() 192 # name.split() 193 # name.find() 194 # name.strip() 195 # name.startswith() 196 # name.format() 197 # name.replace() 198 # "alex".join(["aa",'bb']) 199 200 201 ###### 额外功能: 202 # name = "alex" 203 # name[0] 204 # name[0:3] 205 # name[0:3:2] 206 # len(name) 207 # for循环,每个元素是字符 208 209 210 # 练习题 211 # name = "aleX" 212 # a 213 # v = name.strip() 214 # print(v) 215 # b 216 # v = name.startswith('al') 217 # print(v) 218 # v = name.replace('l','p') 219 # print(v) 220 221 # v = name.split('l') 222 # print(v) # 列表 223 224 # **** 转换成字节 **** 225 # name = "李杰" 226 # v1 = name.encode(encoding='utf-8') # 字节类型 227 # print(v1) 228 # v2 = name.encode(encoding='gbk') # 字节类型 229 # print(v2)
4. 列表(list)
lst.append() | lst.clear() | lst.copy() | lst.count() | lst.extend() |
lst.index() | lst.pop() | lst.remove() | lst.reverse() | lst.sort() |
1 # ## int=xx; str='xxx' list='xx' 2 # user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型 3 # PS: 4 # name = 'alex' 5 # 执行功能; 6 # 1.追加 7 # user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型 8 # user_list.append('刘铭') 9 # print(user_list) 10 # 2. 清空 11 # user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型 12 # user_list.clear() 13 # print(user_list) 14 15 # 3. 拷贝(浅拷贝) 16 # user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型 17 # v = user_list.copy() 18 # print(v) 19 # print(user_list) 20 21 # 4. 计数 22 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型 23 # v = user_list.count('李泉') 24 # print(v) 25 26 # 5. 扩展原列表 27 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型 28 # user_list.extend(['郭少龙','郭少霞']) 29 # print(user_list) 30 31 # 6. 查找元素索引,没有报错 32 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型 33 # v = user_list.index('李海') 34 # print(v) 35 36 # 7. 删除并且获取元素 - 索引 37 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型 38 # v = user_list.pop(1) 39 # print(v) 40 # print(user_list) 41 42 # 8. 删除 - 值 43 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型 44 # user_list.remove('刘一') 45 # print(user_list) 46 47 # 9. 翻转 48 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型 49 # user_list.reverse() 50 # print(user_list) 51 52 # 10. 排序: 欠参数 53 # nums = [11,22,3,3,9,88] 54 # print(nums) 55 # 排序,从小到大 56 # nums.sort() 57 # print(nums) 58 # 从大到小 59 # nums.sort(reverse=True) 60 # print(nums) 61 62 ###### 额外: 63 # user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] 64 # user_list[0] 65 # user_list[1:5:2] 66 # del user_list[3] 67 # for i in user_list: 68 # print(i) 69 # user_list[1] = '姜日天' 70 # user_list = ['李泉','刘一','李泉','刘康','豆豆',['日天','日地','泰迪'],'小龙'] 71 72 73 # li = ['eric','alex','tony'] 74 # 75 # v = len(li) 76 # print(v) 77 # 78 # li.append('seven') 79 # print(li) 80 # 81 # li.insert(0,'Tony') 82 # print(li) 83 # 84 # li[1] = 'Kelly' 85 # 86 # li.remove('eric') 87 # print(list) 88 # 89 # v = li.pop(1) 90 # print(v) 91 # print(li) 92 # 93 # del li[2] 94 95 96 # del li[0:2] # 0 =<x < 2 97 # print(li) 98 99 # li.reverse() 100 # print(li) 101 102 # for i in li: 103 # print(i)
5. 元组(tuple)
元组作为不可变类型,自身具有的方法比较少,应用的范围也有限制
1 # user_tuple = ('alex','eric','seven','alex') 2 # 1. 获取个数 3 # v = user_tuple.count('alex') 4 # print(v) 5 # 2.获取值的第一个索引位置 6 # v = user_tuple.index('alex') 7 # print(v) 8 9 ####### 额外: 10 # user_tuple = ('alex','eric','seven','alex') 11 # for i in user_tuple: 12 # print(i) 13 14 # v = user_tuple[0] 15 16 # v = user_tuple[0:2] 17 # print(v) 18 19 # user_tuple = ('alex','eric','seven',['陈涛','刘浩','赵芬芬'],'alex') 20 # user_tuple[0] = 123 x 21 # user_tuple[3] = [11,22,33] x 22 # user_tuple[3][1] = '刘一' 23 # print(user_tuple) 24 25 # li = ['陈涛','刘浩',('alex','eric','seven'),'赵芬芬'] 26 # ****** 元组最后,加逗号 ****** 27 # li = ('alex',) 28 # print(li)
6. 字典(dict)
dic.clear() | dic.copy() | dic.get() | dic.pop() | dic.popitem() |
dic.setdefault() | dic.update() | dic.append() |
1 # 1. 清空、 2 # dic = {'k1':'v1','k2':'v2'} 3 # dic.clear() 4 # print(dic) 5 6 # 2. 浅拷贝 7 # dic = {'k1':'v1','k2':'v2'} 8 # v = dic.copy() 9 # print(v) 10 11 # 3. 根据key获取指定的value;不存在不报错 12 # dic = {'k1':'v1','k2':'v2'} 13 # v = dic.get('k1111',1111) 14 # print(v) 15 # v = dic['k1111'] 16 # print(v) 17 18 # 4. 删除并获取对应的value值 19 # dic = {'k1':'v1','k2':'v2'} 20 # v = dic.pop('k1') 21 # print(dic) 22 # print(v) 23 24 # 5. 随机删除键值对,并获取到删除的键值 25 # dic = {'k1':'v1','k2':'v2'} 26 # v = dic.popitem() 27 # print(dic) 28 # print(v) 29 30 # k,v = dic.popitem() # ('k2', 'v2') 31 # print(dic) 32 # print(k,v) 33 34 # v = dic.popitem() # ('k2', 'v2') 35 # print(dic) 36 # print(v[0],v[1]) 37 38 # 6. 增加,如果存在则不做操作 39 # dic = {'k1':'v1','k2':'v2'} 40 # dic.setdefault('k3','v3') 41 # print(dic) 42 # dic.setdefault('k1','1111111') 43 # print(dic) 44 # 7. 批量增加或修改 45 # dic = {'k1':'v1','k2':'v2'} 46 # dic.update({'k3':'v3','k1':'v24'}) 47 # print(dic) 48 49 50 # dic = dict.fromkeys(['k1','k2','k3'],123) 51 # print(dic) 52 # dic = dict.fromkeys(['k1','k2','k3'],123) 53 # dic['k1'] = 'asdfjasldkf' 54 # print(dic) 55 56 # dic = dict.fromkeys(['k1','k2','k3'],[1,]) 57 # { 58 # k1: 123123213, # [1,2] 59 # k2: 123123213, # [1,] 60 # k3: 123123213, # [1,] 61 # } 62 # dic['k1'].append(222) 63 # print(dic) 64 # ########## 额外: 65 # - 字典可以嵌套 66 # - 字典key: 必须是不可变类型 67 # dic = { 68 # 'k1': 'v1', 69 # 'k2': [1,2,3,], 70 # (1,2): 'lllll', 71 # 1: 'fffffffff', 72 # 111: 'asdf', 73 # } 74 # print(dic) 75 # key: 76 # - 不可变 77 # - True,1 78 79 # dic = {'k1':'v1'} 80 # del dic['k1']
7. 集合(set)
set.difference() | set.symmetric_difference() | set.intersection() | set.union() | set.discard() |
set.update() |
1 # s1 = {"alex",'eric','tony','李泉','李泉11'} 2 # s2 = {"alex",'eric','tony','刘一'} 3 4 # 1.s1中存在,s2中不存在 5 # v = s1.difference(s2) 6 # print(v) 7 # #### s1中存在,s2中不存在,然后对s1清空,然后在重新复制 8 # s1.difference_update(s2) 9 # print(s1) 10 11 # 2.s2中存在,s1中不存在 12 # v = s2.difference(s1) 13 # print(v) 14 15 # 3.s2中存在,s1中不存在 16 # s1中存在,s2中不存在 17 # v = s1.symmetric_difference(s2) 18 # print(v) 19 # 4. 交集 20 # v = s1.intersection(s2) 21 # print(v) 22 # 5. 并集 23 # v = s1.union(s2) 24 # print(v) 25 26 # 6. 移除 27 # s1 = {"alex",'eric','tony','李泉','李泉11'} 28 # s1.discard('alex') 29 # print(s1) 30 31 # s1 = {"alex",'eric','tony','李泉','李泉11'} 32 # s1.update({'alex','123123','fff'}) 33 # print(s1) 34 # ##### 额外: 35 36 # s1 = {"alex",'eric','tony','李泉','李泉11'} 37 # for i in s1: 38 # print(i) 39 40 # s1 = {"alex",'eric','tony','李泉','李泉11',(11,22,33)} 41 # for i in s1: 42 # print(i)
关于range和enumerate的使用
1 # 1. 请输出1-10 2 # 2.7: 立即生成所有数字 3 # range(1,11) # 生成 1,23,,4,56.10 4 5 # 3.x: 不会立即生成,只有循环迭代时,才一个一个生成 6 # for i in range(1,11): # 7 # print(i) 8 9 # for i in range(1,11,2): # 10 # print(i) 11 12 # for i in range(10,0,-1): # 13 # print(i) 14 15 # 1. 3.x 不会立生成,迭代之后才一个一个创建; 16 """ 17 - 2.7: 18 range() 19 xrange() 不会立生成,迭代之后才一个一个创建; 20 - 3.x 21 range() 不会立生成,迭代之后才一个一个创建; 22 """ 23 # 2. range: 三个参数 24 # 25 # li = ['eric','alex','tony'] 26 # # range,len,li循环 27 # for i in range(0,len(li)): 28 # ele = li[i] 29 # print(ele) 30 31 32 # li = ['eric','alex','tony'] 33 # for i in li: 34 # print(i) 35 36 # for i in range(0,len(li)): 37 # print(i+1,li[i]) 38 39 40 # enumerate额外生成一列有序的数字 41 # li = ['eric','alex','tony'] 42 # for i,ele in enumerate(li,1): 43 # print(i,ele) 44 # 45 # v = input('请输入商品序号:') 46 # v = int(v) 47 # item = li[v-1] 48 # print(item)