Python编程进阶拓展
课前回顾
在今天课程开始之前,同学们和断点社区一起回顾一下上一堂课的主要知识内容:
- 学习了Python的数值类型(Numbers),不同数值类型之间的转换和相关运算。
- 学习了四类常用运算符的使用。
- 学习了条件分支语句,并编写了一个猜数字游戏。
在前面课程的基础上,今天继续Python学习征途,今天课程的主要内容如下:
- 学习for循环,并通过for循环计算从1到100所有整数相加的和。
- 学习Python字符串。
- 学习Python列表。
for循环
断点社区不喜欢做重复的事情,而工作中那些重复的事情又不得不做,相信大家都会有同样的感受,反复做同样的事情很枯燥且容易让人烦躁。
学习编程之后会发现,计算机非常擅长做重复繁琐的事情,所以可以让计算机来完成这些重复工作。
接下来学习如何让计算机去完成那些重复的事情。首先来理解循环(looping)的概念:循环就是让计算机程序周而复始地重复执行同样的步骤。循环主要分为两种类型:
- 重复一定次数的循环,称为计数循环(counting loop),在Python中用for来完成非常方便。例如计算1到100所有整数的和,1 + 2 + 3 +... + 99 + 100,重复的相加动作,且重复次数确定,总共累加99次。
- 重复直至发生某种情况时结束的循环,称为条件循环(conditional loop),只要条件为真,这种循环会一直持续下去。例如上一堂课编写的猜数字游戏,一次次输入数字去匹配谜底数字,如果没有猜对,就重复不断地输入数字去匹配,直到匹配成功为止。在Python中使用while循环完成这种重复工作非常方便(while循环会在后面的课程中详细讲解)。
根据对循环概念的理解分析,通常把第一种循环称为for循环或计数循环,第二种循环称为while循环或条件循环。今天重点来学习for循环。

在很多编程语言中都有多种形式的for语句,Python中的for语句即for - in语句,它可以遍历任意可迭代对象中的元素。可迭代对象包括字符串、列表、元组、集合和字典等。
(一)for语法
for语句的一般格式如下:
for变量in可迭代对象: # 以英文冒号结尾
循环体语句组 # 缩进(在Python编程规范中推荐使用4个半角空格)
else :
语句组 # 中括号部分可以省略

for循环的执行流程图:先判断在序列中是否还有元素,若有则取出下一个元素并执行循环体语句组;若遇到break、return或有异常发生则中断循环;若循环体正常结束,则执行else语句(如果有),最后结束循环。
for语句中的else子语句与while语句中的else子语句作用一样,在循环体正常结束时才执行else语句,在循环被中断时不执行(在遇到break、return和有异常发生时都会中断循环)。

(二)示例讲解
了解了for循环的语法和执行流程,接下来编码实现计算1到100所有整数的和。
第一步,通过for语句的语法,in后面需要是一个可迭代对象,1到100这100个数在Python中可以使用列表表示,比如1到5的列表可以表示成[1, 2, 3, 4, 5] 。先结合列表简单打印出5次“断点社区,晚上好”:
整数列表 = [1, 2, 3, 4, 5]
for i in整数列表:
print('断点社区,晚上好')
运行结果:
断点社区,晚上好
断点社区,晚上好
断点社区,晚上好
断点社区,晚上好
断点社区,晚上好
下面升级一下,计算列表[1, 2, 3, 4, 5]各项相加之和:
整数列表 = [1, 2, 3, 4, 5]
和 = 0
for i in整数列表:
和 += i
print("1到5各数相加之和 =", 和)
运行结果:
1到5各数相加之和 = 15
搞定了1到5各数的相加,要实现1到100各数相加,直接修改整数列表会很麻烦。这时可以用到Python的内置函数range() ,它可以为指定的整数生成一个数字序列(也就是可迭代对象)。range()语法如下:
- range(stop) :只有一个参数时,会生成从0到stop的数字,但不包含stop。
- range(start, stop) :除了指定结束数值,还指定了开始数值。
- range(start, stop, step) :还允许指定步长,这个值默认是1,即生成的数字序列中,每个元素的间隔为1 。步长除了可以是正整数,还可以是负整数。
range和for的关系非常紧密,它们经常同时出现。range()的参数只能是整数。通过代码熟悉一下range()函数:
for i in range(5):
print(i)
for i in range(1, 5):
print(i)
for i in range(0, 5, 2):
print(i)
运行结果可能会让人疑惑为什么没有5,这是因为range()函数会提供一个数字列表,从给定的第一个数开始,在给定的最后一个数之前结束。编写代码时必须考虑这一点,正确调整范围来得到想要的循环次数。
有了range,实现1到100各数相加的和就很容易了:
和 = 0
for i in range(100):
和 += i
print('1到100各数相加的和 = ', 和)
运行结果:
1到100各数相加的和 = 4950
但这里求得的和不对,要将range(100)改成range(101) ,改进代码如下:
和 = 0
for i in range(101):
和 += i
print('1到100各数相加的和 = ', 和)
运行结果:
1到100各数相加的和 = 5050
range()和for循环配合紧密,但for循环还可以跟其他很多对象配合完成各种重复工作,下面讲讲for循环的两个小伙伴——列表和字符串。
列表
在Python中,可包含其他对象的对象,称之为“容器”。容器是一种数据结构。常用的容器主要划分为两种:序列(如:列表、元组等)和映射(如:字典)。序列中,每个元素都有下标,它们是有序的,有通用的操作方法,如索引、长度、组合(序列相加)、重复(乘法)、分片、检查成员、遍历、最小值和最大值。映射中,每个元素都有名称(又称“键”),它们是无序的。除了序列和映射,还有一种容器——“集合”需要注意。
列表(list)是Python最基本的数据结构之一,具有如下特点:
- 有序的数据结构:可以通过索引(也称下标)访问内部数据。
- 可变的数据类型:可以随意添加、删除和更新列表内的数据,列表对象会自动伸缩,确保内部数据无缝隙有序排列。
- 内部数据统称为元素,元素的值可以重复,可以为任意类型的数据,如数字、字符串、列表、元组、字典和集合等。
列表的字面值使用中括号 ( [] ) 包含所有元素,元素之间使用英文逗号 ( , ) 分隔。
(一)创建列表
创建列表有两种方法:
- list(iterable)类型构造函数:参数iterable是可迭代对象(字符串、列表、元组、集合和字典等)。
- [元素1,元素2,元素3,⋯]:指定具体的列表元素,元素之间以逗号分隔,列表元素需要使用英文中括号 [] 括起来。
例如:
列表1 = [1, 2, 3, 4, 5, 6] # 使用英文中括号 [] 创建列表
列表2 = ['youbafu', 32, True] # 元素类型可以不一样
列表3 = list('youbafu') # 字符串转字符列表
print(列表1)
print(列表2)
print(列表3)
运行结果:
[1, 2, 3, 4, 5, 6]
['youbafu', 32, True]
['y', 'o', 'u', 'b', 'a', 'f', 'u']
(二)常用操作
以列表[1, 2, 3, 4, 5, 6]为例,列表下标从0开始,第二个下标是1,依此类推。

索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。

认识了列表的下标,下面通过代码学习一下列表的常用操作方法:
num_list = [1, 2, 3, 4, 5, 6]
# 按下标取值
print(num_list[0], num_list[5])
print(num_list[-6], num_list[-1])
# 使用index()方法获取2在列表num_list中首次出现的下标
index = num_list.index(2)
print(index)
# 使用count()方法获取2在列表num_list中出现的次数
count = num_list.count(2)
print(count)
# 使用len()方法获取列表判断长度
length = len(num_list)
print(length)
# 当且仅当列表为空,在if条件中被判断为False
if num_list:
print("列表num_list不为空")
lst0 = []
if not lst0:
print("列表lst0为空")
# 列表是否包含某个元素
# 使用in关键字可以检测一个列表中是否存在指定的值,如果存在,则返回True;否则返回False。使用not in关键字也可以检测一个值,返回值与in关键字相反。
print(2 in num_list, 6 not in num_list)
# 使用min()和max()方法获取最小值和最大值
print(min(num_list), max(num_list))
运行结果:
1 6
1 6
1
1
6
列表num_list不为空
列表lst0为空
True False
1 6
除了按指定索引获取列表元素,还可以通过random模块中的choice()方法从列表中随机获取一个元素。结合猜数字游戏,假如谜底数字是指定列表中的一个值,实现代码如下:
# 导入随机模块
import random
谜底值列表 = [2, 5, 9, 10, 100]
谜底数字 = random.choice(谜底值列表)
print(谜底数字)
运行结果:
9
(三)更新、添加

- 更新元素:通过索引来对列表的元素进行修改或更新。例如:
列表 = [1, 2, 3, 4, 5]
列表[0] = 20 # 将列表第一个元素改成20
print('更新列表第一个元素后', 列表)
运行结果:
更新列表第一个元素后 [20, 2, 3, 4, 5]
- 添加元素:有append()方法、extend()方法、insert()方法、+运算符、*运算符。
- append()方法、extend()方法、+运算符、*运算符都是往列表的末尾添加数据。
- insert()方法则可以添加元素到指定位置,insert()方法有两个参数:第一个参数指定待插入的位置(索引值),第二个参数是待插入的元素值。
append()方法:
列表对象的append()方法用于在列表的末尾追加元素,语法如下:
list_name.append(obj)
其中,list_name为要添加元素的列表名称,obj为要添加到列表末尾的对象。例如:
列表 = [20, 10, 50, 30]
列表.append(80)
print(列表)
运行结果:
[20, 10, 50, 30, 80]
extend()方法:
append()方法是向列表中添加一个元素,如果想要将一个迭代对象中的全部元素添加当前列表对象的尾部,可以使用列表对象的extend()方法实现,用法如下:
list_name.extend(seq)
其中,list_name为当前列表;seq为要添加的迭代对象。语句执行后,seq的内容将追加到list_name的后面,例如:
列表 = [20, 10, 50, 30]
列表.extend([1, 2, 3])
print(列表)
运行结果:
[20, 10, 50, 30, 1, 2, 3]
insert()方法:
使用列表对象的insert()方法可以将元素添加到指定下标位置。语法格式如下:
list_name.insert(index, obj)
参数index表示插入的索引位置;obj表示要插入列表中的对象。该方法没有返回值,只是在原列表指定位置插入对象。
列表 = [1, 2, 3, 4, 5]
列表.insert(0, 6)
print(列表)
运行结果:
[6, 1, 2, 3, 4, 5]
+运算符:
与extend()方法功能类似,使用+运算符可以将两个列表对象合并为一个新的列表对象。
列表 = [20, 10, 50, 30]
列表 = 列表 + [1, 2, 3]
print(列表)
运行结果:
[20, 10, 50, 30, 1, 2, 3]
注意:+运算符实际上并不是在原列表中添加元素,而是创建了一个新列表,并将原列表中的元素和参数对象依次复制到新列表中。由于涉及大量元素的复制,该操作速度较慢,在涉及大量元素添加时不建议使用该方法。
*运算符:
使用*运算符可以扩展列表对象,将列表与整数相乘,生成一个新列表,新列表是原列表中元素的重复。
列表 = [1, 2, 3, 4, 5]
列表 = 列表 * 3
print(列表)
运行结果:
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
(四)删除
从列表中删除元素,可以有三种方法实现:del命令、pop()方法、remove()方法、clear()方法。删除元素主要有两种情况:一种是根据索引删除;另一种是根据元素值进行删除。
- remove()方法:使用列表对象的remove()方法可以删除首次出现的指定元素。语法格式如下:
list_name.remove(obj)
参数obj表示列表中要移除的对象,即列表元素的值。该方法没有返回值,如果列表中不存在要删除的元素,则抛出异常。
num_list = [1, 2, 2, 3, 4]
num_list.remove(2) # 删除首次出现的2
print(num_list)
运行结果:
[1, 2, 3, 4]
- pop()方法:使用列表的pop()方法可以删除并返回指定位置上的元素。语法格式如下:
list_name.pop([index=-1])
参数index表示要移除列表元素的索引值,默认值为 -1,即删除最后一个列表值。如果给定的索引值超出了列表的范围,将抛出异常。
num_list = [1, 2, 2, 3, 4]
num_list.pop() # 默认删除列表最后一个元素
print(num_list)
num_list.pop(0) # 删除列表第一个元素
print(num_list)
运行结果:
[1, 2, 2, 3]
[2, 2, 3]
- del命令:可以使用del命令来删除列表指定位置的的元素。
num_list = [1, 2, 3, 4]
del num_list[0]
print(num_list)
运行结果:
[2, 3, 4]
- clear()方法:使用列表对象的clear()方法可以删除列表中所有的元素。该方法没有参数,也没有返回值。
num_list = [1, 2, 3, 4]
num_list.clear()
print(num_list)
运行结果:
[]
列表删除方法的总结:pop()方法是删除索引对应的值,remove()方法是删除列表对象中最左边的一个值。pop()方法针对的是元素的索引进行操作,remove()方法针对的是元素的值进行操作。del是一条命令,而不是方法,使用频率不及pop()和remove()方法。
(五)遍历
可以直接遍历列表内容,当需要获取元素值和对应下标的时候更推荐使用enumerate()函数,enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中,例如:
lst = list('Python')
for i in lst:
print(i)
输出结果:
P
y
t
h
o
n
for i, v in enumerate(lst):
print(i, v)
输出结果:
0 P
1 y
2 t
3 h
4 o
5 n
(六)排序
使用列表对象的sort()方法可以进行自定义排序,此时列表对象本身被修改,list_name.sort()方法包含2个可选参数(设定比较关键字,应用情况较为复杂,暂时不用理解),先学习设定排序方式,默认是升序,想要降序排列时,添加参数reverse=True即可,sort()方法无返回值。
num_list = [2, 32, 344, 6, 56, 876]
num_list.sort() # 默认升序
print(num_list)
num_list.sort(reverse=True) # 降序
print(num_list)
运行结果:
[2, 6, 32, 56, 344, 876]
[876, 344, 56, 32, 6, 2]
(七)切片
切片(slice)语法的引入,使得Python的列表真正地走向了高端。切片让我们能够非常方便地来处理列表元素。
现在要求将列表list1中的三个元素取出来,放到列表list2里面。学了前面的知识,可以使用“笨”方法来实现:
num_list = [1, 2, 3, 4, 5]
num_list2 = [num_list[0], num_list[1], num_list[2]]
print("新列表:", num_list2)
运行结果:
新列表: [1, 2, 3]
如果学会了切片,会大大简化这种操作:
num_list = [1, 2, 3, 4, 5]
num_list2 = num_list[0:3]
print("切片出来的列表:", num_list2)
运行结果:
切片出来的列表: [1, 2, 3]
使用列表切片也可以“偷懒”,Python的作者以及Python社区的小伙伴们已经想到了便捷方案:
list = [1, 2, 3, 4, 5, 6]
print(list[:3])
print(list[3:])
print(list[:]) # 复制列表
print(list[::-1]) # 翻转列表
运行结果:
[1, 2, 3]
[4, 5, 6]
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]
如果省略了开始位置,Python会从0这个位置开始。同样道理,如果要得到从指定索引值到列表末尾的所有元素,把结束位置也省去即可。如果啥都没有,只有一个冒号,Python将返回整个列表的拷贝。注意:列表切片并不会修改列表自身的组成结构和数据,它其实是为列表创建一个新的拷贝(副本)并返回。
字符串
编程学习者接触到的第一条语句print('hello world')就已经认识和使用字符串了,字符串几乎是所有编程语言在项目开发过程中,涉及最多的一块内容。大部分项目的运行结果,都需要以文本的形式展示给客户,比如财务系统的总账报表;电子游戏的比赛结果,火车站的列车时刻表等。这些都是经过程序精密的计算、判断和梳理,将我们想要的内容以文本形式直观地展示出来。有人曾调侃说,程序员开发一个项目,基本上就是在不断地处理字符串。虽然有点夸张,但也足够说明字符串的应用广泛。今天断点社区来详细讲解一下Python的字符串。
字符串使用单引号包裹起来的内容,也可以使用双引号,但务必要成对编写,不能一边是单引号而另一边是双引号。
(一)常用表示方式
字符串有三种表示方式:普通字符串、原始字符串和长字符串。

- 普通字符串:指用单引号(')或双引号(")括起来的字符串。在使用单引号定义的字符串中,可以直接包含双引号,而不必进行转义;而在使用双引号定义的字符串中,可以直接包含单引号,而不必进行转义。即外单内双,外双内单。如果想在字符串中包含一些特殊的字符,例如换行符、制表符等,在普通字符串中就需要转义,前面要加上反斜杠(),这叫作字符转义。

编码中比较常见的转义符如下:
字符表示 |
Unicode编码 |
说明 |
\t |
\u0009 |
水平制表符 |
\n |
\u000a |
换行 |
\r |
\u000d |
回车 |
\" |
\u0022 |
双引号 |
\' |
\u0027 |
单引号 |
\ |
\u005c |
反斜线 |
简单的来看看代码:
s = 'Hi 断点社区'
print(s)
s = 'Hi \'\" \n 断点社区' # 了解转义符
print(s)
运行结果:
Hi 断点社区
Hi '"
断点社区
-
原始字符串:原生字符串的出现目的是解决在字符串中显示特殊字符。在原生字符串里,所有的字符都直接按照字面的意思来使用,不支持转义序列和非打印的字符。可以使用r或R来定义原生字符串,这个操作符必须紧靠在第一个引号前面。!
语法格式如下:
r"原生字符串"
R"原生字符串"
定义文件路径的字符串时,会使用很多反斜杠,如果每个反斜杠都用歧义字符串来表示会很麻烦,可以采用下面代码来表示:
# str1 = "C:\Users\youbafu\pythonProjects" # 直接写\U会报错 因为\U是转义符
str2 = "C:\\Users\\youbafu\\pythonProjects" # 转义字符
str3 = r"C:\Users\youbafu\pythonProjects" # 不转义,使用原生字符串
# print(str1)
print(str2) # 输出:C:\Users\youbafu\pythonProjects
print(str3) # 输出:C:\Users\youbafu\pythonProjects
- 长字符串:如果要使用字符串表示一篇文章,其中包含了换行、缩进等排版字符,则可以使用长字符串表示。对于长字符串,要使用三个单引号 ''' 内容 ''' 或三个双引号 """ 内容 """ 包起来,例如:
咏鹅 = """
咏鹅
鹅,鹅,鹅,
曲项向天歌。
白毛浮绿水,
红掌拨清波。
"""
print(咏鹅)
输出结果:
咏鹅
鹅,鹅,鹅,
曲项向天歌。
白毛浮绿水,
红掌拨清波。
(二)字符串格式化
Python字符串格式化有三种方法:%、format()与f-strings。
- str.format()格式化:这种方式是在Python 2.6引入的,使用占位符将要想将表达式的计算结果插入字符串中,则需要用到占位符。对于占位符,使用一对大括号({})表示。在占位符中可以有参数序号,序号从0开始。序号0被format()方法中的第1个参数替换;序号1被format()方法中的第2个参数替换,以此类推。在占位符中还可以有参数名,可以根据参数名替换占位符。
name = '断点社区'
val = '游戏安全训练营'
print('{0} 的 {1} 起航了,在 {1} 中,带您领略Python编程的优雅和强大。'.format(name, val))
运行结果:
断点社区 的 游戏安全训练营 起航了,在 游戏安全训练营 中,带您领略Python编程的优雅和强大。
格式化控制符在占位符中还可以有格式化控制符,对字符串的格式进行更加精准的控制。字符串的格式化控制符及其说明如下:
格式控制符 |
说明 |
s |
字符串 |
d |
十进制整数 |
f, F |
十进制浮点数 |
g、G |
十进制整数或浮点数 |
e、E |
科学计算法表示浮点数 |
o |
八进制整数,符号是小英文字母o |
x、X |
十六进制整数,x是小写表示,X是大写表示 |
格式化控制符位于占位符索引或占位符名字的后面,之间用冒号分隔,语法:{参数序号:格式控制符} 或{参数名:格式控制符}。示例:
money = 158926.1564
name = '托尼老弟'
print('{0} 今年的收入达到了 {1:0.3f}元'.format(name, money))
print('{0} 今年的收入达到了 {1:e}元'.format(name, money))
运行结果:
托尼老弟 今年的收入达到了 158926.156元
托尼老弟 今年的收入达到了 1.589262e+05元
- f-Strings格式化:f-Strings是一种改进版格式化方式,从Python 3.6版本开始引入了新的字符串格式化方式。f-strings也称作“格式化的字符串字面量”,它是一个带有f前缀的字符串,通过大括号嵌入所需的Python表达式,这些表达式的具体值是在运行时确定的,背后依赖的也是嵌入对象的format()接口。f-strings的句法类似于str.format(),但要更简洁。由于f-strings是在运行时计算具体值的,得以在字符串中嵌入任意有效的Python表达式,从而写出更优雅的代码。
money = 158926.1564
name = '托尼老弟'
print(f'{name} 今年的收入达到了 {money:0.3f}元')
print(f'{name} 今年的收入 {money:e}元, 明年的目标是 {money * 2.5:0.2f}')
运行结果:
托尼老弟 今年的收入达到了 158926.156元
托尼老弟 今年的收入 1.589262e+05元, 明年的目标是 397315.39
字符串的常用方法
Python字符串提供了非常丰富且实用的方法。下表总结了字符串的所有方法及对应的含义:
方法 |
含义 |
capitalize() |
将字符串的第一个字符修改为大写,其他字符全部改为小写 |
casefold() |
将字符串的所有字符修改为小写 |
center(width[,fillchar]) |
当字符个数大于width时,字符串不变;当字符个数小于width时,字符串居中,并在左右填充空格以达到width指定宽度;fillchar参数可选,指定填充的字符(默认是空格) |
count(sub[,start[,end]]) |
返回sub参数在字符串里边出现的次数;start和end参数可选,指定统计范围 |
encode(encoding='utf-8',errors='strict') |
以encoding参数指定的编码格式对字符串进行编码,并返回errors参数指定出错时的处理方式,默认是抛出UnicodeError异常,还可以使用'ignore'、'replace'、'xmlcharrefreplace'、'backslashreplace'等处理方式 |
endswith(sub[,start[,end]]) |
检查字符串是否以sub参数结束,如果是返回True,否则返回False;start和end参数可选,指定范围 |
expandtabs(tabsize=8) |
把字符串中的制表符(\t)转换为空格代替 |
find(sub[,start[,end]]) |
检查sub参数是否包含在字符串中,如果有则返回第一个出现位置的索引值,否则返回-1;start和end参数可选,表示范围 |
index(sub[,start[,end]]) |
跟find()方法一样,不过该方法如果找不到将抛出一个ValueError异常 |
isalnum() |
如果字符串仅由字母或数字构成则返回True,否则返回False |
isalpha() |
如果字符串仅由字母构成则返回True,否则返回False |
isdecimal() |
如果字符串仅由十进制数字构成则返回True,否则返回False |
isdigit() |
如果字符串仅由数字构成则返回True,否则返回False |
islower() |
如果字符串仅由小写字母构成则返回True,否则返回False |
isnumeric() |
如果字符串仅由数值构成则返回True,否则返回False |
isspace() |
如果字符串仅由空白字符构成则返回True,否则返回False |
istitle() |
如果是标题化(所有的单词均以大写字母开始,其余字母皆小写)字符串则返回True,否则返回False |
isupper() |
如果字符串仅由大写字母构成则返回True,否则返回False |
join(iterable) |
以字符串作为分隔符,插入到iterable参数迭代出来的所有字符串之间;如果iterable中包含任何非字符串值,将抛出TypeError异常 |
ljust(width[,fillchar]) |
当字符个数大于width时,字符串不变;当字符个数小于width时,左对齐字符串,并在右边填充空格以达到width指定宽度;fillchar参数可选,指定填充的字符(默认是空格) |
lower() |
将字符串的所有大写字母修改为小写字母 |
lstrip([chars]) |
删除字符串左边的所有空白字符;chars参数可选,指定待删除的字符集 |
partition(sep) |
找到sep参数第一次出现的位置,并将字符串切分成一个三元组(sep前面的子字符串,sep,sep后面的子字符串);如果字符串中不包含sep,则返回三元组(原字符串,"", "") |
replace(old,new[,count]) |
将字符串中的old参数指定的字符串替换成new参数指定的字符串;count参数可选,表示最多替换次数不超过count |
rfind(sub[,start[,end]]) |
类似于find()方法,不过是从右边开始查找 |
rindex(sub[,start[,end]]) |
类似于index()方法,不过是从右边开始查找 |
rjust(width[,fillchar]) |
当字符个数大于width时,字符串不变;当字符个数小于width时,右对齐字符串,并在右边填充空格以达到width指定宽度;fillchar参数可选,指定填充的字符(默认是空格) |
rpartition(sep) |
类似于partition()方法,不过是从右边开始查找 |
rstrip([chars]) |
删除字符串右边的所有空白字符;chars参数可选,指定待删除的字符集 |
split(sep=None,maxsplit=-1) |
以空白字符作为分隔符对字符串进行分割;sep参数指定分隔符,默认是空白字符;maxsplit参数设置最大分割次数,默认是不限制 |
splitlines([keepends]) |
以换行符作为分隔符对字符串进行分割;keepends参数设置最大分割次数 |
startswith(prefix[,start[,end]]) |
检查字符串是否以prefix参数开头,如果是则返回True,否则返回False;start和end参数可选,表示范围 |
strip([chars]) |
删除字符串前边和后边所有空白字符;chars参数可选,指定待删除的字符集 |
swapcase() |
将字符串中所有的大写字母修改为小写,将小写字母修改为大写 |
title() |
以标题化(所有的单词均以大写字母开始,其余字母皆小写)的形式格式化字符串 |
translate(table) |
根据table的规则(可以由str.maketrans('a', 'b')定制)转换字符串中的字符 |
upper() |
将字符串的所有小写字母修改为大写字母 |
zfill(width) |
当字符个数大于width时,字符串不变;当字符个数小于width时,返回长度为width的字符串,原字符串右对齐,前边用0进行填充 |
这里选几个常用的字符串方法给大家演示一下用法,其他的可以根据上述文档的注释照葫芦画瓢。注意:只要涉及字符串修改的方法,并不是修改原字符串,而是返回字符串修改后的一个拷贝。isdigit()方法检测字符串是否由数字组成,如果字符串只包含数字,则返回True;否则返回False。lower()方法用于将字符串中所有的英文字母修改为小写。
str = "YouBaFu Love Python!"
print(f'str.isdigit(): {str.isdigit()}')
print(f'str.lower(): {str.lower()}')
print(f"str.find('y'): {str.find('y')}")
print(f'str.replace("Love", "Like"): {str.replace("Love", "Like")}')
print(f"str.split(' '): {str.split(' ')}")
运行结果:
str.isdigit(): False
str.lower(): youbafu love python!
str.find('y'): 14
str.replace("Love", "Like"): YouBaFu Like Python!
str.split(' '): ['YouBaFu', 'Love', 'Python!']
str3 = " https://www.bpsend.net\t\n\r"
print(f"原字符串: {str3}。")
print(f"字符串 : {str3.strip()}。")
str4 = ".@.湖南长沙@...."
print(f"原字符串: {str4}。")
print(f"字符串 : {str4.strip('@.')}。")
运行结果:
原字符串 https://www.bpsend.net
字符串 : https://www.bpsend.net。
原字符串: .@.湖南长沙@....。
字符串 : 湖南长沙。
五常 = ['中国', '俄罗斯', '美国', '英国', '法国']
print(f'{",".join(五常)}')
print(f"{' - '.join(五常)}")
运行结果:
中国,俄罗斯,美国,英国,法国
中国 - 俄罗斯 - 美国 - 英国 - 法国
join()方法的语法可能会让人觉得奇怪,被拼接的对象应该放在join()方法的左侧更合适。但join()方法是字符串对象的方法,所以只能这么写。另外还有一个重要的原因是,join()的参数支持一切可迭代对象(如列表、元组、字典、文件、集合或生成器等)。更重要一点是join()方法代替加号(+)来拼接字符串,这是因为使用加号(+)去拼接大量的字符串,效率相对会比较低,这种操作会频繁进行内存复制和触发垃圾回收机制。
课程总结
本节课的学习内容可以说是编程的核心要点,循环、列表和字符串,在编程中应用的非常广泛。关于循环只是讲解了其中的一部分,还有while条件循环、循环嵌套都没有进行讲解,这些都会在后面的课程进行讲解。列表和字符串方面也是主要介绍了常用的操作,在后续的课程中也会结合示例对列表和字符串进行学习,同学们想要掌握好课程知识的使用,就得多多练习。