课程链接
rang的用法
- rang(10):从0~10的循环
字符串进阶
-
字符串的索引和切片
-
切片的语法:[起始:结束:步长] 字符串[start: end: step] 这三个参数都有默认值,默认截取方向是从左往右的 start:默认值为0;end : 默认值未字符串结尾元素; step : 默认值为1;
如果切片步长是负值,截取方向则是从右往左的
-
例子
name = 'mollymolly' name[1] name[-4] name[1:4] #左闭右开 name[1:7:2] # 2是步长,意思是每隔两个选一个;值可以为负数,若是负数则倒着数默认为1 name[::-1] #把字符串反过来
# 如果字符串以'p'结尾,则打印 list_string = ['apple','banana_p','orange','cherry_p'] for fruit in list_string: if fruit[-1] == 'p': #与if fruit.endswith('p'):等价 print(fruit)
-
-
字符串常用功能
-
help(my_string.count) #help是内置的函数,可以返回括号里面函数的使用方法 my_string = 'aabcabca' my_string.count('abca') #数字符串里面有多少个不重叠的‘abca’
-
find和index
find:返回从左第一个指定字符的索引,找不到返回-1
index:返回从左第一个指定字符的索引,找不到报错my_string = 'hello_world' my_string.find('wo') #返回第一个字母的下标 'and' in article #判断article里面是否有and,返回true或false
-
startswith和endswith
my_string = 'hello_world' my_string.startswith('hello') # 是否以hello开始 my_string.endswith('world') # 是否以world结尾
-
split字符串的拆分:按照指定的内容进行分割 正则表达式
my_string = 'hello_world' my_string.split('_') #返回结果:['hello', 'world']
-
字符串的替换:从左到右替换指定的元素,可以指定替换的个数,默认全部替换
my_string = 'hello_world' my_string.replace('_',' ') my_string = "I wish to wish the wish you wish to wish" my_string.replace('wish','wish'.upper(), 3) #只替换前面3个wish
-
字符串标准化:默认去除两边的空格、换行符之类的,去除内容可以指定
my_string = ' hello world\n' my_string.strip()
-
字符串的变形
my_string = 'hello_world' my_string.upper() #把每一个字母变成大写 my_string.lower() #把每一个字母变成小写 my_string.capitalize() #变成首字母大写
-
-
字符串的格式化输出
-
%
accuracy = 80/123 print('老板!我的模型正确率是%.2f!' % accuracy) #%.2f:保留小数点后两位 '%.d %%' %(accuracy*100) #输出65%
name = 'Molly' hight = 170.4 score_math = 95 score_english = 89 print('大家好!我叫%s,我的身高是%d cm, 数学成绩%.2f分,英语成绩%d分' % (name, hight, score_math, score_english))
-
format
若指定了 : s ,则只能传字符串值,如果传其他类型值不会自动转换当不指定类型时,传任何类型都能成功,如无特殊必要,可以不用指定类型
'Hello, {0}, 成绩提升了{1:.1f}分,百分比为 {2:.1f}%'.format('小明', 6, 17.523)
'Hello, {name:}, 成绩提升了{score:.1f}分,百分比为 {percent:.1f}%'\ # \ :说明还没写完,要换行 .format(name='小明', score=6, percent = 17.523)
-
f-string:一种可读性更好的方法 f-string
name = 'Molly' hight = 170.4 score_math = 95 score_english = 89 print(f"大家好!我叫{name.lower()},我的身高是{hight:.3f} cm, 数学成绩{score_math}分,英语成绩{score_english}分") #{}里面也可以执行命令 #结果:大家好!我叫Molly,我的身高是170.400 cm, 数学成绩95分,英语成绩89分
-
list进阶
-
list索引、切片:与字符串的类似
list1 = ['a','b','c','d','e','f'] list1[2] list1[2:5] #左闭右开,从2~5
-
list常用函数
-
添加新的函数
list1 = ['a','b','c','d','e','f'] list1.append('g') # 在末尾添加元素 print(list1) list1.insert(2, 'ooo') # 在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加 print(list1)
list2 = ['z','y','x'] list1.extend(list2) #合并两个list;会改变list1;list2中仍有元素 list1.append(list2) #将list2作为一个整体合并到list1中 list1+list2 #合并两个list;list1和list2不变 print(list1) print(list2)
-
count 计数 和 index查找(没有find方法)
list1 = ['a','b','a','d','a','f'] print(list1.count('a')) print(list1.index('a')) #返回第一个a的位置 print('a' in list1) #返回true或false
-
删除元素
list1 = ['a','b','a','d','a','f'] print(list1.pop(3)) print(list1.pop()) # 把列表中的最后一个弹出,即‘f’ print(list1) list1.remove('a') #把最左边的‘a’移除掉,返回的是空值 print(list1)
-
-
列表生成式
-
例子1:[ 操作 for n in 列表名 ]
-
[n+1 for n in list_1] #和下面的方法等效:把list_1中的每一项加1 for i in range(len(list_1)): list_1[i] += 1
-
# 1-10之间所有数的平方 [(n+1)**2 for n in range(10)] #结果: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
-
# 1-10之间所有数的平方 构成的字符串列表 [str((n+1)**2) for n in range(10)] #结果: ['1', '4', '9', '16', '25', '36', '49', '64', '81', '100']
-
list1 = ['a','b','a','d','a','f'] ['app_%s'%n for n in list1] [f'app_{n}' for n in range(10)] #和上面的效果一样 #结果: ['app_a', 'app_b', 'app_a', 'app_d', 'app_a', 'app_f']
-
-
例子2:筛选
-
list_1 = [1,2,3,4,5] [n for n in list_1 if n%2==0] #等价下面的方法 list_2 = [] for i in range(len(list_1)): if list_1[i] % 2 ==0: list_2.append(list_1[i])
-
# 字符串中所有以'sv'结尾的 list_2 = ['a','b','c_sv','d','e_sv'] [s for s in list_2 if s.endswith('sv')] #结果: ['c_sv', 'e_sv']
-
# 取两个list的交集 list_A = [1,3,6,7,32,65,12] list_B = [2,6,3,5,12] [i for i in list_A if i in list_B] #结果:[3, 6, 12]
-
#在list_A 但是不在list_B中 list_A = [1,3,6,7,32,65,12] list_B = [2,6,3,5,12] [i for i in list_A if i not in list_B]
-
[m + n for m in 'ABC' for n in 'XYZ'] #结果: ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
-
-
-
生成器
-
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
-
g = (x * x for x in range(10)) #访问生成器的值 next(g) for n in g: print(n)
-
定义函数:生成器 :yield
def factor(max_num): # 这是一个函数 用于输出所有小于max_num的质数 factor_list = [] #存储质数的列表 n = 2 while n<max_num: find = False for f in factor_list: # 先看看列表里面有没有能整除它的 if n % f == 0: find = True break if not find: factor_list.append(n) yield n #抛出来一个结果,下一次循环从这里开始 n+=1 g = factor(100) #g是一个生成器,这个时候不会调用factor函数 for n in g: #每进行一次循环时才调用函数进行一个运算,每次运算从yield开始 print(n)
-