python中有六大标准数据类型:数字、字符串、列表、元组、字典、集合
1.字符串
1 # 字符串为不可变数据类型 2 # 字符串一旦创建不可修改 3 # 字符串一旦修改或拼接,则会重新生成信字符串 4 # 8位表示一个字节 5 # utf8编码中汉字占3个字节,gbk编码中汉字占2个字节 6 # Unicode中统一字符都占2个字节 7 8 name = " hgAlexHgzero \n wuzhihao " 9 10 print("大小写转换效果:") 11 print(name.capitalize()) # 首字母大写 12 print(name.swapcase()) # 将字符串中的大小写互换 13 print(name.title()) # 字符串中的每个单词首字母大写 14 print(name.upper()) # 全部变大写 15 print(name.lower()) # 全部变小写,只能转换26个英文字母 16 print(name.casefold()) # 更为牛逼的全部变小写,不光支持26个英文字母,还支持其他非字母 17 print("*"*80) 18 19 20 print("判断开头结尾:") 21 print(name.endswith("zero")) # 判断是否以zero字符串结尾 22 print(name.startswith("hg")) # 判断是否以hg字符串开头 23 print("*"*80) 24 25 26 print("strip效果:") 27 print(name.strip()) # 剔除字符串两端的空白 28 print(name.rstrip()) # 剔除字符串右边的空白 29 print(name.lstrip()) #剔除字符串左边的空白 30 print("*"*80) 31 32 33 print("查找find和index :") 34 print(name.find("A")) # 查找A,返回其索引,若找不到,则返回-1 35 # index 和 find 都有从左和从右开始找的方法,rfind() lfind() rindex() lindex() 36 print("index为:",name.index("A")) # 返回字符串的索引值,若找不到则返回错误 37 38 39 print("统计数量") 40 name.count("hgzero",3,9) # 在3到9的位置计数hgzero出现的次数 41 print("*"*80) 42 43 44 print("特殊效果:") 45 print(name.center(50,"*")) # 将字符串放于50个支付内容的中间,其他空缺内容用*符号补充 46 print(name.ljust(20,"-")) # 占用20个字符串空位,name字符串靠左,未填满则用-补充 47 print(name.rjust(20,"-")) # 与ljust类似,name字符串靠右 48 print(name.zfill(20)) # 占用20个字符串空位,name字符串未占用的空位则在前面补0 49 print("*"*80) 50 51 52 print("replace效果:") 53 print(name.replace("zero","Wuzhihao")) # 用第二个参数来替换第一个参数,但是不会改变原来的字符串,只作为一次结果 54 # replace()的第三个参数表示要替换的次数,若不指定则表示替换所有 55 print("*" * 80) # 可用变量来接受这一次的结果 56 57 print("partition效果:") 58 print(name.partition("zero")) # 以zero将整个字符串分成3部分 zero前,zero,zero后 保存为列表 59 print("*"*80) 60 61 print("split效果:") 62 print(name.split("H")) # 按照H字符将整个字符串进行切割,切割后H字符消失,切割后内容保存为列表形式 63 print(name.splitlines()) # 按照行分隔,返回一个包含各行作为元素的列表,按换行来切割 64 print("*"*80) 65 66 67 print("join效果:") 68 b = "-" 69 print(b.join(name)) # 将字符串b 插入到字符串变量name中的每个字符之间,形成一个新的字符串 70 print("*".join(name)) 71 print("*"*80) 72 73 74 print("字符串类型判断:") 75 print(name.isdigit()) # 判断所有字符是否是字符 76 print(name.isalpha()) # 判断所有字符是否为字母 77 print(name.isalnum()) # 判断所有字符是否为数字和字母的组合 78 print(name.isspace()) # 判断是否为纯空格 79 print("*"*80) 80 81 82 print("expandtabs方法的使用:") 83 like = "name:wuzhihao\tage:20\taddr:China\t" 84 print(like.expandtabs(15)) # 每次以15个字符位为一单位,直至出现\t ,每一单位中的除了字符串的空白位用空格填充 85 86 87 print(" 7个基本魔法:join() , split() , find() , strip() , lower() , upper() , replace() ") 88 print("\n"*3) 89 90 91 love = "I love you forever" 92 print(len(love)) # 获取字符串的长度 93 print(love[4]) # 通过下标的方法截取字符串 94 print(love[2:6]) # 通过切片的方式截取字符串 95 96 97 print("range方法") 98 print(range(0, 20, 2)) # 以2为步长(每隔一个数),打印在0到20的范围内(不包括20)的值 99 # python2中range方法立即创建,而python3中range只在要循环迭代的时候才创建
2.列表
1 # 可变类型(mutable):列表,字典 2 # 不可变类型(unmutable):数字,字符串,元组 3 4 # python中 字符串、列表、元组、字典、集合都是可迭代对象 5 # 列表是有序的 6 7 names = ['hgzero', 'wuzhihao', 'zero', 'wuzhihao', 'hg', 'hao'] 8 9 print("切片操作") 10 print(names[0:4]) # 列表的切片操作不包括最后一个值 11 print(names[0:4:2]) # 切片的第三个参数代表 每隔1个数取一个值 12 print(names[:4]) 13 print(names[1:]) 14 print(names[:-1]) # 取值不包括最后一个值 15 print("#" * 50) 16 17 18 print("三种增加的方法:") 19 print("追加") 20 names.append("wu") # 在列表尾部追加 21 names.append("zhi") 22 names.append("hao") 23 print(names) 24 print("插入") 25 names.insert(2, "插入的值") # 在2索引的位置插入要添加的值 26 print(names) 27 print("扩展") 28 b = [1, 2, 3, 5, 9, 7, 8] 29 names.extend(b) # 将b列表合并到names列表中(尾部添加),形成一个新的列表 30 print(names) 31 32 33 print("三种删除的方法") 34 del names[2] 35 del names[3:5] 36 print(names) 37 names.remove("hgzero") # 删除指定的元素 38 print(names) 39 names.pop() # 删除列表的最后一个值并返回删除的值,也可加上参数表示删除指定的索引的值并返回删除的值 40 print(names) 41 42 43 print("修改") 44 names[2] = "修改的值" 45 names[3:6] = ["first", "second", "thrid"] # 批量修改 46 print(names) 47 48 49 print("获取下标") 50 print(names.index("wuzhihao")) # 只返回找到的第一个下标 51 52 53 print("统计") 54 print(names.count("wuzhihao")) 55 56 57 print("排序和翻转") 58 b.sort() # 排序 59 print(b) 60 b.reverse() # 反转 61 print(b) 62 63 64 print("浅拷贝") 65 v = names.copy() 66 print(v) 67 68 69 print("清空") 70 names.clear() 71 print(names)
3.元组
1 # 元组和列表差不多,但是元组一旦创建,便不能再修改(增加、修改、删除),所以又叫只读列表 2 # 元组和列表可以互换 list() tuple() 3 4 # 元组的末尾最好加上一个逗号 5 6 names = ("hgzero","wuzhihao","zero","wuzhihao",) 7 8 print("元组的切片") 9 print(names[1:3]) 10 11 12 print("元组和列表的转换") 13 ls = list(names) 14 print(ls) 15 tu = tuple(ls) 16 print(tu) 17 18 19 print("元组只有2个查的方法,一个是count,另一个是index") 20 print(names.count("wuzhihao")) 21 print(names.index("zero")) 22 23 24 print("元组为可迭代对象") 25 print("*".join(names)) # 当元组中全部为字符串时,可以用join方法来转换 26 27 28 print("元组是有序的") 29 tu = (111,"alex",(11,22),[(33,44)],True,33,55) 30 print(tu[3][0][0]) 31 32 33 print("元组的不能修改只是针对元组的一级元素,但一级元素中的内容可用修改") 34 tu[3][0]="wuzhihao" 35 print(tu)
4.字典
1 # 字典存储为 键值对 形式 2 # 字典dick 是无序的 3 4 # 字典的键key 必须是唯一的 5 # 字典中的key必须为不可变数据类型 6 # 布尔值可以作为字典的key 7 8 # 可变类型(mutable):列表,字典 9 # 不可变类型(unmutable):数字,字符串,元组 10 11 info = { 12 "stu1": "hg zero", 13 "stu2": "wu zhihao", 14 "stu3": "hao wu", 15 } 16 17 18 print("增加:") 19 info['stu4'] = "wuzhihao" 20 print(info) 21 22 print("字典的扩展:") 23 b = {"A": 1, "B": 2, "C": 3} 24 info.update(b) # 将b字典中的内容扩展到info中 25 print(info) 26 info.update(k1=123, k2=456, k3=789) # update() 也支持在括号中直接使用=进行键值对赋值,其会自动转换成字典的形式,类似**kwargs 27 print(info) 28 29 print("删除(两种):") 30 info.pop("stu4") # pop() 可传入第二个参数(默认值),表示若没有指定的key,则返回默认值 31 print(info) 32 del info["stu3"] 33 print(info) 34 35 print("修改:") 36 info['stu4'] = "Tom" 37 print(info) 38 39 print("查找(三种):") 40 print("stu1" in info) # 判断名为stu1的键是否在info字典中 41 print(info.get("stu2")) # 获取字典中键为stu2的值 42 print(info.get("stu9")) # 若要获取的键在字典中不存在,则返回None 43 print(info["stu2"]) # 这样获取对应键的值,若字典中不存在则会报错 44 45 46 print("字典中的其他方法:") 47 print(info.values()) # 获取字典中的所有的值 48 print(info.keys()) # 获取字典中的所有的键 键和值都可用用for循环来打印出来 49 print(info.items()) # 获取字典中的所有的键和值 50 51 info.setdefault("stu7", "Alex") # 设置默认的键值对 52 print(info) 53 54 v = dict.fromkeys([1, 2, 3, 4], "hgzero") # 构建一个字典,将第一个参数迭代为key , 第二个参数为每个key的value 55 print(v) 56 57 58 print("字典的循环:") 59 for key in info: 60 print(key, info[key]) 61 62 for k, v in info.items(): # 会先把dict字典转换为list列表,数据量大时不用 63 print(k, v)
5.集合
1 # 集合:去重性 , 将一个列表转换成集合,就自动去重了 2 # 集合是无序的 3 # 集合是可变类型,但是不能修改,只能增加或者删除 4 5 a = {3, 6, 4, 7, 8} # 定义集合的方式 6 s = set([3, 5, 9, 10, 2]) # 可用set()方法来生成集合 7 s2 = set("Hello") 8 9 10 print("定义一个不可变类型的集合:") 11 f = frozenset({2, 3, 5, 6, 7}) # 此处定义了一个不可变类型的集合,不可增加或者删除其中的值 12 print(f) 13 for i in f: 14 print(i) 15 16 print("添加(两种):") 17 s.add("x") # 添加一项,且一次只能添加一个值 18 s.update([12, 45, 77]) # 添加多项,可以传进各种可迭代对象,统一迭代添加到集合中 19 s.update(s2) # 更新 20 print(s) 21 22 print("删除(三种):") 23 s.pop() # 因为集合是无序的,所以pop()是随机删除 24 s.remove("H") # 删除一项,若不存在会报错 25 s.discard("e") # 若不存在不会报错 26 print(s) 27 28 print("拷贝:") 29 b = a.copy() 30 print(b) 31 32 print("清空:") 33 a.clear() 34 print(a) 35 36 print("判断:") 37 print(2 in s) # 判断2是否在s集合中 38 print(2 not in s) 39 40 print("获取集合的长度:") 41 print(len(s)) # 获取集合的长度 42 43 44 print("集合中的交、并、差、对称差 集:") 45 # a = s | s2 # 两者之间的并集 46 x = a.union(s2) 47 48 # b = s & s2 # 两者之间的交集 49 y = s.intersection(s2) 50 51 # c = s - s2 # 差集 (在s中,但不在s2中) 52 z = s.difference(s2) 53 54 # d = s ^ s2 # 对称差集 (在s或s2中,但不会同时出现在二者中) 55 w = s.symmetric_difference(s2) 56 57 58 print("两个集合之间关系的判断:") 59 a1 = {1, 2, 3, 4, 5} 60 a2 = {1, 2, 3, 4, 5, 6, 7, 8} 61 print(a1.isdisjoint(a2)) # 判断两个集合中是否有交集,如果没有这位True,如果有则为False 62 print(a1.issubset(a2)) # 判断a1是否为a2的子集,若是则为真,否则为假 63 print(a1.issuperset(a2)) # 判断a1是否为a2的父集,若是则为真,否则为假