Python【day2】:Python入门(python分类、编码方式、数据类型列表、字典、字符串、元组、整数、浮点数等介绍)
pycharm小技巧:
pycharm连接github方法:
1、想要将pycharm的源代码上传到github上的时候:
第一步:vcs菜单-commit changes;
第二部:vcs菜单-git-push;
python版本的分类
1、cpython 1c解释器 2.pyc(字节码) 3转换机器码 4cpu调用执行 编译过程(12) 执行过程(34) 执行过程包含转换成机器码 (应用最广泛)
2、jpython 2java解释器 2java字节码 3机器码 4cpu调用执行
3、ironpython 3c#解释器 2c#字节码 3机器码 4cpu调用执行
4、ruby python
5、js python
6、pypy 1解释器 2字节码 3编译成机器码 4执行的过程,直接执行机器码
编译过程(123) 执行4 这里执行过程只包含步骤4,所有比较快
编码方式
ascii、unicode 、utf-8的区别
1、ascii:其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
2、Unicode:(统一码、万国码、单一码) 规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
缺点:ascii码中的内容也是用2个字节保存,这个浪费了内存或存储空间
注:此处说的的是最少2个字节,可能更多
3、UTF-8:是对Unicode编码的优化,他不再使用最少使用2个字节,
ascii码中的内容用1个字节保存、(避免的unicode 用2个字节保存,浪费空间的情况)
欧洲的字符用2个字节保存,
东亚的字符用3个字节保存...
python 2.7默认是ascii编码,显示中文,需要编码声明
python 3.5默认是utf-8编码,显示中文,不需要编码声明
上述3个编码方式的转换--见下图

unicode:编码encode变成utf8
utf8:解码decode变成unicode
数字、字符串的缓冲池概念
1、数字中-5~257这些数,会存在缓冲池中,就是这些数字每次不需要重复在内存中创建,会在缓存中放着,节约内存空间;
2、字符串也会按照一个内存的算法,将最常用的字符串存在缓冲池,这样这些常见字符串每次不需要重复在内存中创建,会在缓存中放着,节约内存空间;
主入口程序
例子1:
模块1(py文件)test.py
模块2(py文件)lib/3.py
模块3(py文件) index.py
上述3个模块,模块3中导入了模块1和模块2,执行模块3的时候:
模块1.__name__ == test
模块2.__name__ == 1ib.3
模块3.__name__ == "__main__"
如果想要模块3被别的模块导入的时候,不执行,只有模块3是入口程序,或者执行模块3,它才执行,可以在模块3中这么写:
if __name__ == "__main__"
例子2:
#内置函数 __name__
# def f1():
# pass
# def f2():
# pass
# if __name__ == "__main__":
# f1() #意思是这样当前模块是执行入口的时候,f1函数才会调用,如果当前模块是被别的模块导入的话,f1函数不会被调用
中断循环
break 跳出整个循环
continue 跳出当次迭代
pass 啥都不干,占位,语法检查
return 函数返回
exit 退出整个程序 sys.exit()
包含
in
__contains__
with不需要关闭文件的原理
#with open("1.txt") as f
# import contextlib
# @contextlib.contextmanager #装饰器管理上下文(线程池:计算线程多少活跃,多少等待)
# def show():
# print("123") #打开文件
# yield
# print("456") #关闭文件
# with show():
# print("99999") #写文件
# 输出
# 123
# 99999
# 456
基本数据类型
一切事物都是对象,对象由类来产生,见下图
新建一个列表[1,2,3],列表是对象,列表由list类来产生,列表的内置方法都存在list类中;字符串、元组、字典等都是这个原理

type(变量名):可以查看变量的数据类型(str\list\diac\tuple还是别的数据类型)
dir(变量名):可以查看该变量所在的类中,包含哪些内置方法
字符串
字符串在内存中的存储方式:
字符串"alex"是内存中连续的空间,如果想要将"alex"变成"alexy","alexy"是会在内存中再开辟一个内存空间
而不是在原来的"alex"后面再存储一个字符"y"
由于上述原因,需要用格式化拼接字符串,避免用+拼接字符串(这样会重复开辟内存空间,性能低)
列表
1 __author__ = 'Administrator' 2 # -*- coding:utf-8 -*- 3 4 #定义列表的两种方式 5 li = [1,2,3] #注意:模块(py文件)名字、变量名字都不能是list,否则会把list类覆盖 6 li = list([1,2,3]) #通过list类,创建对象实例li 7 li1 = list((4,5,)) 8 # li = [1,2,3] 9 print(type(li)) 10 print(dir(li)) 11 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', 12 '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', 13 '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', 14 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', 15 '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 16 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 17 18 #不带两个下划线的方法 19 #1添加元素 20 li = [1,2,3] 21 li.append("4") #添加元素"4"到列表的最后 22 print(li) #[1, 2, 3, '4'] 这里"4"是字符串,前面的1,2,3都是数字 23 24 #2清空列表 25 li = [1,2,3] 26 li.clear() #清空列表中的所有元素 27 print(li) #[] 28 29 #3拷贝 30 # 浅拷贝,只拷贝列表的第一层,其余更深层就不拷贝了 31 # 深拷贝,会拷贝所有的层 32 33 #4计算元素在列表出现的次数 34 li = [1,2,3,3,5,3,3] 35 print(li.count(3)) #4 数字3在列表一共出现4次 36 37 #5合并第二个列表到第一个列表 38 li = [1,2,3] 39 li1 = [4,5] 40 li.extend(li1) 41 # print(li.extend(li1)) 打印这个会报错,由于li列表发生了变化 42 print(li) #[1, 2, 3, 4, 5] 43 44 #5-1合并元组到列表 45 li = [1,2,3] 46 tu = (4,5,999) 47 li.extend(tu) 48 print(li) #[1, 2, 3, 4, 5, 999] 49 50 51 #6返回列表中元素的索引号 52 li = ["a","b","c",1,2,3] #这里abc必须加上引号,表示字符串,不加引号,表示变量 53 print (li.index("a")) #0 元素"a"的索引号是0 54 # print (li.index("a1")) #会报错 ValueError: 'a1' is not in list (由于"a1"不在列表中) 55 # print (li.index("c",0,2)) #[0,2) 这里取值范围是左闭右开,所有在索引号是0,1的元素中找不到"c",会报错 56 print (li.index("c",2)) #2 "c"的索引号是2 取值范围,从索引号是2开始,一直到列表最后 57 # L.index(value, [start, [stop]]) -> integer -- return first index of value. 58 # Raises ValueError if the value is not present. 59 60 #7给列表中指定位置,插入新的元素 61 li = ["a","b","c",1,2,3] 62 li.insert(0,"x") #给索引号是0的位置,插入新的元素"x" 63 print(li.insert(0,"x")) #None,由于列表li发生了变化 64 print(li) #['x', 'a', 'b', 'c', 1, 2, 3] 65 66 #8删除元素并返回这个被删除的元素(默认是最后一个,可以指定索引号删除) 67 li = ["a","b","c",1,2,3] 68 print(li.pop()) #3 不带参数,默认删除最后一个元素并返回该元素 69 print(li) #['a', 'b', 'c', 1, 2] 70 71 li = ["a","b","c",1,2,3] 72 print(li.pop(2)) #3 带参数,删除索引号是2的元素并返回该元素 73 print(li) #['a', 'b', 1, 2, 3] 74 75 li = ["a","b","c",1,2,3] 76 li1 = [] 77 # print(li.pop(6)) #报错 IndexError: pop index out of range 索引越界,没有索引号是6的元素,最大的索引号是5 78 # print(li1.pop()) #报错 IndexError: pop from empty list 不能从空列表删除元素 79 print(li) 80 # L.pop([index]) -> item -- remove and return item at index (default last). 81 # Raises IndexError if list is empty or index is out of range. 82 83 # 'remove', 'reverse', 'sort' 84 #9删除元素-指明元素值删除 85 li = ["a","b","b","c",1,2,3] 86 li.remove("b") #删除原始"b",有2个相同的元素"b",删除左边第一个 87 # li.remove("e") #报错,如果要删除的元素不存在,ValueError: list.remove(x): x not in list 88 print("remove",li) #['a', 'b', 'c', 1, 2, 3] 89 # L.remove(value) -> None -- remove first occurrence of value. 90 # Raises ValueError if the value is not present. 91 92 #10删除元素-根据索引号删除 93 li = ["a","b","b","c",1,2,3] 94 del li[1] #删除列表中索引号是1的元素 95 print(li) #['a', 'b', 'c', 1, 2, 3] 96 97 #11反转倒置 98 li = ["a","b","b","c",1,2,3] 99 li.reverse() #将列表的元素反转 100 # print(li.reverse())#None 因为反转后li已经改变了 101 print(li) #[3, 2, 1, 'c', 'b', 'b', 'a'] 102 103 #12排序-升序 104 li = [11,22,33,44,55,66,77,88,99,90] 105 li1 = ["d","a","b","b","c"] 106 li3 = ["a","b","b","c","1","2","3"] 107 # li2 = ["a","b","b","c",1,2,3] 108 li.sort() 109 li1.sort() 110 # li2.sort() 111 li3.sort() 112 # print(li.sort()) 113 print(li) # 数字可以排序[11, 22, 33, 44, 55, 66, 77, 88, 90, 99] 114 print(li1) # 字符串可以排序 ['a', 'b', 'b', 'c', 'd'] 115 # print(li2) #报错 数字和字符串混合不能排序 TypeError: unorderable types: int() < str() 116 print(li3) #字符串可以排序 ['1', '2', '3', 'a', 'b', 'b', 'c'] 这里'1', '2', '3'是字符串,而不是数字 117 118 #13排序-倒序-安照ascii 119 li = [11,22,33,44,55,66,77,88,99,90] 120 li1 = ["a","b","b","c","1","2","3"] 121 li.sort(reverse=True) 122 li1.sort(reverse=True) 123 print(li) #数字倒序排列[99, 90, 88, 77, 66, 55, 44, 33, 22, 11] 124 print(li1) # 字符串倒序排列['c', 'b', 'b', 'a', '3', '2', '1'] 125 126 #14判断列表中是否包含某个元素 127 li = [11,22,33,44,55,66,77,88,99,90] 128 print(li.__contains__(11)) #True 判断列表中是否包含某个元素 129 print(11 in li) #True 判断元素11是否在列表中 130 131 #15列表的长度 132 li = [11,22,33,44,55,66,77,88,99,90] 133 print(len(li)) #10 列表中含有10个元素(调用__len__()方法) 134 print(li.__len__()) #10 列表中含有10个元素
字典
1 #创建字典的2个方式 2 dic ={"k1":"v1","k2":"v2"} 3 dic1 = dict(k1="v1",k2="v2") 4 # dic3 ={k1:"v1",k2:"v2"} #报错 这个方式 key必须加双引号 NameError: name 'k1' is not defined 5 # dic2 = dict("k1"="v1","k2"="v2") #报错 这个方式 key不能加双引号SyntaxError: keyword can't be an expression 6 print(dic1) #{'k1': 'v1', 'k2': 'v2'} 7 print(dic) #{'k1': 'v1', 'k2': 'v2'} 8 # print(dic2) 9 # print(dic3) 10 11 print(type(dic)) #<class 'dict'> 打印当前变量的数据类型 12 print(dir(dic)) #打印字典中含有的方法 13 print(dir(dict))# 14 ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', 15 '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', 16 '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 17 '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 18 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] 19 20 #1-1添加元素到字典,value是字符串 21 dic0 = {} #定义空字典 22 dic ={"k1":"v1","k2":"v2"} 23 dic["k3"] = "v3"# 将键值对"k3":"v3"添加到字典 这里key和value都需要双引号,表示字符串,不加上引号就是变量 24 #注意:往列表追加元素是append方法;往字典添加键值对,没有内置方法,直接给key赋值就可 25 print(dic) #{'k3': 'v3', 'k2': 'v2', 'k1': 'v1'} 字典是无序了,没有索引号,通过key来定位 26 27 #1-2添加元素到字典,value是列表 28 dic0 = {} #定义空字典 29 dic ={"k1":"v1","k2":"v2"} 30 dic["k3"] = [1,2,3]# 将键值对"k3":[1,2,3]添加到字典 31 print(dic) #{'k2': 'v2', 'k1': 'v1', 'k3': [1,2,3]} 32 33 #1-3添加元素到字典,value是字典 34 dic0 = {} #定义空字典 35 dic ={"k1":"v1","k2":"v2"} 36 dic["k3"] = {"k4":"v4"}# 将键值对"k3":{"k4":"v4"}添加到字典 37 print(dic) #{'k2': 'v2', 'k3': {'k4': 'v4'}, 'k1': 'v1'} 38 39 #1-4添加元素到字典,value是字典 40 dic0 = {} #定义空字典 41 dic ={"k1":"v1","k2":"v2"} 42 dic["k3"] = {"k3":"v3"}# 将键值对"k3":{"k3":"v3"}添加到字典,不同层次,2个k3,key相同是允许的 43 print(dic) #{'k1': 'v1', 'k2': 'v2', 'k3': {'k3': 'v3'}} 44 45 #2 不允许key相同 46 dic0 = {} #定义空字典 47 dic ={"k1":"v1","k1":"v2"} #当key相同的时候,第一个key的vaue会被第二个key覆盖,不允许key相同 48 print(dic) #{'k1': 'v2'} 49 50 #3-1根据字典key取出value 51 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 52 dic2 = {'k1': 'v1', 'k2': 'v2', 'k3': [1,2,3]} 53 print(dic["k1"]) #v1 取出字典key-"k1"对应的value-"v1" 54 #注意:;列表通过索引号取元素li[0],字典通过key取value---dic["k1"] 55 # print(dic["k5"]) #报错 KeyError: 'k5' 56 print(dic["k3"]["k4"]) #v4 取出字典key-"k3"对应的value-{'k4': 'v4'},再取出key-"k4"对应的value-"v4" 57 print(dic2["k3"][0]) #1 通过字典的key取出列表,通过列表的索引号取出列表元素 58 59 #3-2 通过key去取value,key如果不存在默认None,页可以返回指定的 60 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 61 print(dic.get("k1")) #v1 取出key-"k1"的value 62 print(dic.get("k5")) #None 如果key-"k5"不存在,不会报错,默认返回None 63 print(dic.get("k5","test")) #test 如果key-"k5"不存在,不会报错,指定返回"test" 64 # print(dic["k5"]) #报错 如果不用get方法,直接取值,如果key不存在,就报错# KeyError: 'k5' 65 66 #4取出字典的所有keys 67 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 68 print(dic.keys()) #dict_keys(['k1', 'k3', 'k2']) 把字典的所有key取出存在一个列表中 69 # print(dic.keys()[0]) #报错 TypeError: 'dict_keys' object does not support indexing 字典是无序号的 70 for i in dic.keys(): #遍历字典的key 71 print(i), 72 for i in dic: #遍历字典,也是默认输出key 73 print(i), 74 for v in dic.values(): #遍历字典的values 75 print(v), 76 for k,v in dic.items(): #遍历字典,输出key和value,这里必须是dic.items()方法 77 print(k,dic[k]), #这里的k不能加双引号 78 79 #5取出字典的所有values 80 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 81 print(dic.values()) #dict_values(['v2', {'k4': 'v4'}, 'v1']) 82 print(type(dic.values())) #<class 'dict_values'> 83 for v in dic.values(): #遍历字典的values 84 print(v), 85 86 #6取出字典的所有key-value键值对 87 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 88 for k,v in dic.items(): 89 print(k,dic[k]) 90 91 #7 以列表的元素作为字典的key,默认的value是None,也可以自定义value“test” 92 dic = dic.fromkeys(["k1","k2","k3"]) 93 dic2 = dic.fromkeys(["k1","k2","k3"],"test") 94 print(dic) #{'k2': None, 'k3': None, 'k1': None} 95 print(dic2) #{'k3': 'test', 'k1': 'test', 'k2': 'test'} 96 97 #8-1 删除键值对 98 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 99 print(dic.pop("k1")) #v1 删除k1:v1键值对,并且返回v1值 100 print(dic) #{'k3': {'k4': 'v4'}, 'k2': 'v2'} 101 102 #8-2 删除键值对-删除不存在的key,不指定第二个参数就报错,指定了第二个参数,就返回第二个参数 103 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 104 # print(dic.pop("k5")) #报错 key不存在的时候 KeyError: 'k5' 105 print(dic.pop("k5","k5不存在")) #k5不存在 如果k5不存在,返回指定的提示 106 print(dic) #{'k3': {'k4': 'v4'}, 'k2': 'v2'} 107 # D.pop(k[,d]) -> v, remove specified key and return the corresponding value. 108 # If key is not found, d is returned if given, otherwise KeyError is raised 109 110 #9 随机删除一个键值对 111 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 112 print(dic.popitem()) #随机删除一个键值对 113 print(dic) 114 115 #10-1 给不存在的key赋默认值None 116 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 117 print(dic.setdefault("k5")) #None k5这个key不存在,默认给k5赋值None 118 print(dic) #{'k2': 'v2', 'k5': None, 'k3': {'k4': 'v4'}, 'k1': 'v1'} 119 120 #10-2 给不存在的key赋默认自定义值 121 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 122 print(dic.setdefault("k5","test")) #test k5这个key不存在,默认给k5赋值"test" 123 print(dic) #{'k1': 'v1', 'k3': {'k4': 'v4'}, 'k5': 'test', 'k2': 'v2'} 124 125 #11 合并字典2到字典1中 126 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 127 dic2 = {'k5': 'v5'} 128 dic.update(dic2) #将字典dic2合并到字典dic中 129 print(dic) #{'k2': 'v2', 'k5': 'v5', 'k3': {'k4': 'v4'}, 'k1': 'v1'} 130 131 #12包含 132 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 133 print("k1" in dic) #True 判断key-"k1"是否在字典中 134 print(dic.__contains__("k1")) #True 判断字典是否包含key-"k1" 135 136 #13删除字典元素 137 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 138 dic.__delitem__("k1") #删除指的键值对 139 print(dic) #{'k3': {'k4': 'v4'}, 'k2': 'v2'} 140 141 #14长度 142 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 143 print(len(dic)) #3 字典含有多少键值对 144 145 #15输出字典key和序号 列表的序号和元素 146 dic = {'k1': 'v1', 'k2': 'v2', 'k3': {'k4': 'v4'}} 147 for i,v in enumerate(dic): 148 print(i,v) 149 li = ["a","b","c"] 150 for i,v in enumerate(li): 151 print(i,v)
元组
#元组和列表的区别,元组的元素是不能修改(不能增加元素,不能删除元素,不能修改元素)的, # 但是元组元素的元素是可以修改的 tu = (1,[1,2]) print(tu[1]) #[1, 2] 通过索引号取出元组的元素 #1修改元组的元素的元素 tu[1][0] = 3 print(tu) #(1, [3, 2]) #2修改元组的元素 # tu[0]=3 # print(tu) #报错 元组的元素不能修改 TypeError: 'tuple' object does not support item assignment #创建元组的两种方式 tu = (1,2) tu1 = tuple((1,2)) print(tu) print(tu1) print(type(tu)) #<class 'tuple'> print(dir(tu1)) # 打印元组的内置方法 ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] #1计算元素在元组中出现的次数 tu = (1,2,2,3,4,2) print(tu.count(2)) #3 数字2在元组中有3个 #2返回元素的索引号 tu = (1,2,2,3,4,2) print(tu.index(4)) #4 数字4在元组中的索引号是4
字符串
#1创建字符串的两种方式 name = "jack" name1 = str("jack") print(name) print(name1) print(type(name)) #<class 'str'> print(dir(name)) #打印字符串中包含的内置方法 ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] #0查看内置方法帮助文档的方法:按住ctrl键,鼠标移到方法名字上,鼠标变成小手,左键单击即可跳到帮助处 #1字符串首字符大写 name = "jack" print(name.capitalize()) #Jack #2-1大写字母转小写字母 name = "JAck" print(name.casefold()) #jack #2-2大写字母转小写字母 name = "JAck" print(name.lower()) #jack #3-1居中对齐,两边填充特殊符号 name = "jack" print(name.center(20)) # jack 一共20个字符,两边默认用空格填充,可以用于做字段居中对齐(购物清单) print(name.center(20,"*")) #********jack******** 一共20个字符,两边用星号*填充,可以用于做分隔线 # S.center(width[, fillchar]) -> str # Return S centered in a string of length width. Padding is # done using the specified fill character (default is a space) #3-2左对齐,右边填充特殊符号 name = "jack" print(name.ljust(20)) #jack 一共20个字符,右边默认用空格填充,可以用于做字段左对齐(购物清单) print(name.ljust(20,"=")) #jack================ 一共20个字符,右边用等号=填充,可以用于做分隔线 #3-3右对齐,左边填充特殊符号 name = "jack" print(name.rjust(20)) # jack 一共20个字符,左边默认用空格填充,可以用于做做字段右对齐(购物清单 print(name.rjust(20,"!")) # !!!!!!!!!!!!!!!!jack 一共20个字符,左边用叹号!填充,可以用于做分隔线 #3-4右对齐,左边填充数字0 name = "1111" print("***",name.zfill(20)) #00000000000000001111 一共20个字符,左边默认用0填充 #4计算字符串中字符出现的次数 name = "jackaa" print(name.count("a")) #3 返回字符"a"在字符串中出现的次数是3 print(name.count("a",2)) #2 作用范围:索引号2或者2以后,字符"a"在这个范围中出现的次数是2 print(name.count("a",1,4)) #1 作用范围:[1,4) 左闭右开,字符"a"在这个范围中出现的次数是1 # S.count(sub[, start[, end]]) -> int #5-1是否以某个字符(或者字符子串)开头 name = "jackaa" print(name.startswith("j")) #True 字符串是否以字母"j"开头 print(name.startswith("ja")) #True 字符串是否以字符串"ja"开头 print(name.startswith("j",1)) #False 作用范围:索引号1或者1以后,字符串是否以字母"j"开头 print(name.startswith("j",1,4)) #False 作用范围:[1,4) 左闭右开,字符串是否以字母"j"开头 # S.endswith(suffix[, start[, end]]) -> bool #5-2是否以某个字符(或者字符子串)结尾 name = "jack" print(name.endswith("k")) #True 字符串是否以字母"k"结尾 print(name.endswith("ck")) #True 字符串是否以字符串"ck"结尾 print(name.endswith("k",1)) #True 作用范围:索引号1或者1以后,字符串是否以字母"k"结尾 print(name.endswith("k",1,3)) #False 作用范围:[1,3) 左闭右开,字符串是否以字母"k"结尾 # S.endswith(suffix[, start[, end]]) -> bool #6 将字符串中的tab \t用8个空格替换 name = "ja\tck" print(name.expandtabs()) #ja ck 将字符串中的tab--\t用8个空格代替,用于批量去掉配置文件中的tab #7-1 索引,返回字符的索引号(找不到,返回-1) name = "jack" print(name.find("a")) #1 返回字符a的索引号 print(name.find("ac")) #1 返回字符串ac中的a的索引号 print(name.find("ac",1)) #1 作用范围:索引号1或者1以后,返回字符串ac中的a的索引号 print(name.find("al",0,2)) #-1 作用范围:[0,2) 左闭右开,返回字符串al中的a的索引号,如果没有该字符,就返回-1 # S.find(sub[, start[, end]]) -> int# # Return the lowest index in S where substring sub is found, # such that sub is contained within S[start:end]. Optional # arguments start and end are interpreted as in slice notation.# # Return -1 on failure. #7-2 索引,返回字符的索引号(找不到,报错) name = "jack" print(name.index("a")) #1 返回字符a的索引号 print(name.index("ac")) #1 返回字符串ac中的a的索引号 print(name.index("ac",1)) #1 作用范围:索引号1或者1以后,返回字符串ac中的a的索引号 # print(name.index("al",0,2)) #-1 作用范围:[0,2) 左闭右开,返回字符串al中的a的索引号, # 如果没有该字符,就报错,提示没有找到 ValueError: substring not found # S.index(sub[, start[, end]]) -> int # Like S.find() but raise ValueError when the substring is not found. #8-1 字符串格式化 info = "name {0},age {1}" #定义占位符 print(info.format("tom","19")) #name tom,age 19 给占位符传入实参 info1 = "name {0}" print(info1.format("tom")) #name tom #8-2 字符串格式化 %s %d %f name = "jack" print("welcome",name) #welcome jack print("welcome %s,please" % name) #welcome jack,please print("%s is %s years old" % (name,19)) #jack is 19 years old #9 连接列表中的多个元素,用连接符 li = ["a","b","c"] print("_".join(li)) #a_b_c 用连接符号"_"下划线,连接列表中的3个元素 print("".join(li)) #abc print("|".join(li)) #a|b|c 用连接符号"|"竖线,连接列表中的3个元素 print(";".join(li)) #a;b;c 用连接符号";"分号,连接列表中的3个元素 li1 =["jack|123|0","tom|123|0"] print("\n".join(li1)) #tom|123|0 用连接符号\n换行符,连接列表的2个元素,形成2行 # S.join(iterable) -> str # Return a string which is the concatenation of the strings in the # iterable. The separator between elements is S. #10 拆分 name = "jack|123|0" print(name.split("|")) #['jack', '123', '123'] 用"|"作为分隔符,将字符串拆分后,3个字符串作为列表的3个元素 print(name.split("|",1)) #['jack', '123|123'] 用左边第一个"|"作为分隔符,将字符串拆分成2部分,2个字符串作为列表的2个元素 print(name.split()) #['jack|123|0'] print(name.split(" ")) #['jack|123|0'] print(list(name)) #['j', 'a', 'c', 'k', '|', '1', '2', '3', '|', '0'] name1 = "jack 123 0" print(name1.split()) #['jack', '123', '0'] 默认以空格作为分隔符,将字符串拆分后,3个字符串作为列表的3个元素 print(name1.split(" ")) #['jack', '123', '0'] 指定以空格作为分隔符 print(name1.split(" ",1)) #['jack', '123 0'] 指定以左边第一个空格作为分隔符 # S.split(sep=None, maxsplit=-1) -> list of strings # Return a list of the words in S, using sep as the # delimiter string. If maxsplit is given, at most maxsplit # splits are done. If sep is not specified or is None, any # whitespace string is a separator and empty strings are # removed from the result. # 10-2 拆分 name = "jack 123 0" print(name.partition("123")) #('jack ', '123', ' 0') 以123作为分隔符将字符串拆分成3部分,中间那部分是分隔符本身 print(name.partition("1234")) #('jack 123 0', '', '') # S.partition(sep) -> (head, sep, tail) # Search for the separator sep in S, and return the part before it, # the separator itself, and the part after it. If the separator is not # found, return S and two empty strings. #10-3 拆分行 name = "jack 123 0\ntom 123 0" print("=====",name.splitlines()) #===== ['jack 123 0', 'tom 123 0'] 默认以换行符作为分隔符,拆分成2个字符串,作为列表的2个元素 print("=====",name.splitlines(2)) #===== ['jack 123 0\n', 'tom 123 0'] 拆分成2个字符串,作为列表的2个元素,第一个字符串包含换行符 # S.splitlines([keepends]) -> list of strings # Return a list of the lines in S, breaking at line boundaries. # Line breaks are not included in the resulting list unless keepends # is given and true. #11 去空格或者换行符(去两端) name = "jack 123 0 " name1 = "\njack 123 0\n" name2 = "3 0jack 123 0" name3 = "0jack 123 0" print(name.strip()) #jack 123 0 两端的空格被去掉了 print(name1.strip()) #jack 123 0 两端的换行符\n被去掉了 print(name3.strip("0")) #jack 123 两端的"0"被删除 print(name2.strip("3 0")) #jack 12 两端的"3 0"被删掉了 # S.strip([chars]) -> str # Return a copy of the string S with leading and trailing # whitespace removed. # If chars is given and not None, remove characters in chars instead. #11-2 去空格或者换行符(去右边) name = "jack 123 0 " name1 = "jack 123 0\n" name2 = "jack 123 0" name3 = "jack 123 0\t" print(name.rstrip()) #jack 123 0 去掉右边的空格 print(name1.rstrip()) #jack 123 0 去掉右边的换行符 print(name2.rstrip("0")) #jack 123 去掉右边的字符串"0" print(name3.rstrip()) #jack 123 去掉右边的tab键 # print(name2.rstrip(0)) #报错 参数不能是数字,得是字符串 TypeError: rstrip arg must be None or str #11-3 去空格或者换行符(去左边) name = " jack 123 00 " name1 = "\njack 123 0" name2 = "jack 123 0" name3 = "\tjack 123 0" print(name.lstrip()) #jack 123 00 去掉最左边的空格 print(name1.lstrip()) #jack 123 0 去掉最左边的换行符 print(name2.lstrip("j")) #ack 123 0 去掉右边的字符串"j" print(name2.lstrip("ja")) #ck 123 0 去掉右边的字符串"ja" print(name3.lstrip()) #jack 123 0去掉最左边的tab键 #12替换 name = "jack 123 00" name1 = "jack 00 123 00" name2 = "jack 00 123 00 12 00" print(name.replace("00","01")) #jack 123 01 print(name1.replace("00","01")) #jack 01 123 01 print(name1.replace("00","01",1)) #jack 01 123 00 第三个参数1表示只替换左边第一个"00" print(name2.replace("00","01",2)) #jack 01 123 01 12 00 第三个参数2表示只替换左边前2个"00" # S.replace(old, new[, count]) -> str # Return a copy of S with all occurrences of substring # old replaced by new. If the optional argument count is # given, only the first count occurrences are replaced. # """ #13-1大小写互换 name = "jack TOM" print(name.swapcase()) #JACK tom # S.swapcase() -> str # Return a copy of S with uppercase characters converted to lowercase # and vice versa. #13-2 每个单词首字母大写 name = "jack bob" print(name.title()) #Jack Bob # S.title() -> str # Return a titlecased version of S, i.e. words start with title case # characters, all remaining cased characters have lower case. #13-3 小写全部转大写 name = "jack bob" print(name.upper()) #JACK BOB # S.upper() -> str # Return a copy of S converted to uppercase. #13-4 大写全部转小写 name = "JACK BoB" print(name.lower()) #jack bob #14-1包含in name = "jack bob" print("a" in name) #True 字符"a"是否在字符串中 #14-2包含 name = "jack bob" print(name.__contains__("a")) #True 字符串是否包含字符"a" #15长度 name = "jack bob" print(len(name)) #8
# 课堂练习
# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,
# 将小于等于 66 的值保存至第二个key的值中。
# 即: {'k1': 大于66 , 'k2': 小于等于66}
# 预期结果: {'k1': [11, 22, 33, 44, 55, 66], 'k2': [11, 77, 88, 99, 90]}
# dic ={'k1': [], 'k2': []}
#踩过的坑:
# 1 事先把预期结果想好,再着手去做,就是需求要理解对(审题)
# 2 字典内含有列表(整体结构),遍历列表,做判断
# 3 列表添加元素--append (dic["k1"]代表列表,dic["k1"].append())
# 4 字典添加元素(键值对)--直接赋值 dic["k1"] =[i,]
# #整体思路1 --方法12(好理解)
# 1先定义字典结构 dic ={'k1': [], 'k2': []}
# 2再遍历列表,判断大于 66 的数 添加append到dic["k2"]
# 小于等于 66 的数 添加append到dic["k1"]
# 3打印字典
# #整体思路2 --方法34(运用课堂知识)
# 1先定义空字典 dic ={}
# 2再遍历列表,判断大于 66 的数
# 再次判断"k2"是否在字典中,不在的话,创建键值对 dic["k2"] = [i,];在的话添加append到dic["k2"]
# 小于等于 66 的数
# 再次判断"k1"是否在字典中,不在的话,创建键值对 dic["k1"] = [i,];在的话添加append到dic["k1"]
# 3打印字典
# #整体思路3 --方法5(缺点:列表的元素多的,不实用;优点:列表的元素少的时候,简洁)
# 1 先定义空白字典
# 2 对列表sort排序
# 3 根据列表的索引号给字典的key赋值
# dic["k1"] = li[0:6]
# dic["k2"] = li[6:]
# 4 打印字典
# 方法1: dic = {"k1":[],"k2":[]} #直接定义字典结构 li = [11,22,33,44,55,66,77,88,99,90] for i in li:#遍历列表的数 if i >66: dic["k1"].append(i) #把大于66的数添加到空列表1 dic["k1"]指的是空列表[] else: dic["k2"].append(i) #把小于等于66的数添加到空列表2 dic["k2"]指的是空列表[] print(dic) #{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]} # 方法2:-65 dic = {} #定义空字典 li = [11,22,33,44,55,66,77,88,99,90] dic["k1"] = [] #添加一个键值对(元素) dic["k2"] = [] #添加第二个键值对(元素) print(dic) #{'k1': [], 'k2': []} 先把架子搭好 for i in li:#遍历列表的数 if i >66: dic["k1"].append(i) #把大于66的数添加到空列表1 else: dic["k2"].append(i) #把小于等于66的数添加到空列表2 print(dic) #{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]} #方法3: dic = {} #定义空字典 li = [11,22,33,44,55,66,77,88,99,90] for i in li: if i>66: if "k2" in dic: dic["k2"].append(i) else: dic["k2"] =[] else: if "k1" in dic: dic["k1"].append(i) else: dic["k1"] =[] #如果这里是空列表,那么列表中会少11和77两个值,没有实现需求 print(dic) #{'k2': [88, 99, 90], 'k1': [22, 33, 44, 55, 66]} #方法4:ws dic = {} #定义空字典 li = [11,22,33,44,55,66,77,88,99,90] for i in li: if i>66: if "k2" in dic: dic["k2"].append(i) else: dic["k2"] =[i,] else: if "k1" in dic: #22进来 dic["k1"].append(i) #往字典的value的列表中添加元素 else: #1 11进来 dic["k1"] =[i,] #2 创建一个键值对(value不是空列表),这里value是列表的形式 print(dic) #{'k1': [11, 22, 33, 44, 55, 66], 'k2': [77, 88, 99, 90]} #方法5: sj dic ={} #定义空字典 li = [11,22,33,44,55,66,77,88,99,90] li.sort() #排序 dic["k1"]=li[0:6] #'k1': [11, 22, 33, 44, 55, 66] 列表的元素少,可以用这个方法,多了就不适用了 dic["k2"]=li[6:] # 'k2': [77, 88, 90, 99] print(dic) #{'k1': [11, 22, 33, 44, 55, 66], 'k2': [77, 88, 90, 99]}

浙公网安备 33010602011771号