字符串是Python中最常用的数据类型之一,今天我们来讲讲字符串的核心操作:
目录
一、字符串的创建
1.Python中创建字符串非常简单,用引号来创建。
| 单/双引号 |
|
| 两者完全等价 |
| 三引号 |
|
| 支持换行和保留格式 |
# 单引号、双引号、三引号
s1 = '你好'
s2 = "世界"
s3 = """多行
字符串"""
print(s1, s2)
print(s3)

单引号 ( ' )和双引号(" )完全等价,三引号('' '' '')可以创建多行字符串
2.转义字符\和r
\是转义字符,r前缀创建原始字符串
如果字符串中包含引号,我们又想把它按照本来的意思打印出来,可以用另一种引号包围,或者用转义字符\。
转义字符是告诉编译器,接下来的符号,不是要执行它的功能,是要“转义”它本来的含义。
# 转义字符示例
s4 = 'I\'m a student' # 用\'表示单引号
s5 = "路径:C:\\Users\\Test" # \\表示反斜杠
s6 = r"路径:C:\Users\Test" # 原始字符串,r前缀让转义失效
print(s4)
print(s5)
print(s6)

解释:\是转义字符,r前缀创建原始字符串,常用于正则表达式和文件路径
关键点:原始字符串适用于不需要转义的场合,代码更简洁
总结了常见转义字符,表格如下:
| 转义序列 | 含义 | 用途说明 |
|---|---|---|
\n | 换行符 | 让光标移动到下一行(打印时换行)。 |
\t | 制表符 | 相当于按了一下 Tab 键,用于对齐。 |
\" | 双引号 | 当字符串用双引号括起来时,用来表示内部的引号。 |
\\ | 反斜杠 | 表示一个普通的反斜杠字符。 |
\r | 回车符 | 让光标移动到当前行的开头。 |
转义字符总结:
- 让特殊符号“变回”普通符号(如
\'、\"、\\)。 - 搭配某些字母,会“变成”特殊指令(如
\n变成换行,\t变成缩进)
二、字符串切片操作
切片是字符串的核心操作,语法为:字符串[开始:结束:步长]
1.基础切片
s = "Python编程"
# 基础切片
print(s[0:6]) # 从0开始,到6结束(不包含6)
print(s[:6]) # 省略开始,默认为0
print(s[6:]) # 省略结束,默认为末尾
print(s[:]) # 省略开始和结束,复制整个字符串

切片结果包含开始位置,不包含结束位置。省略开始或结束时使用默认值。
2.有步长的切片
步长默认为1,可以是负数,表示反向切片。
# 步长应用
print(s[::2]) # 步长为2,隔一个取一个
print(s[::-1]) # 步长为-1,字符串反转
print(s[-2:]) # 负数索引,从右往左数

解释:正数索引从0开始,负数索引从-1开始(最右边)。步长为负时,字符串反转。
关键点:负数索引非常实用,-1代表最后一个字符,-2代表倒数第二个。
三、字符串的增删改查
1. 增加字符串
|
|
|
| 少量连接方便,但效率低 |
|
|
|
| 连接列表高效,推荐! |
# 方法一:+ 运算符(连接)
s1 = "Hello"
s2 = "World"
result = s1 + " " + s2
print(result)
# 方法二:join() 方法
words = ["Python", "is", "awesome"]
sentence = " ".join(words)
print(sentence)
# join效率更高,尤其适合连接多个字符串

+适合少量字符串连接,join()方法效率更高,特别适合连接列表中的多个字符串。
解释:" ".join(words) 表示把words里面的元素用空格连接起来。
关键点:join()前面的字符串是连接符,可以是空格、逗号等任意字符。
2. 删除和修改字符串
|
| 去两端空格/指定字符 |
|
| 仅去左端或右端 |
|
| 替换内容,原字符串不变 |
s = " Hello Python "
# 去除空白字符
print(s.strip()) # 去除两边空格
print(s.lstrip()) # 去除左边空格
print(s.rstrip()) # 去除右边空格
# 删除特定内容(用replace替换为空)
email = "test@example.com"
print(email.replace("@", "")) # 删除@符号

解释:strip()系列方法用于去除两端字符(默认是空格)。replace()可以替换或删除字符。
关键点:字符串不可变,这些方法都返回新字符串,原字符串不变。
3. 查询字符串
| 索引访问 |
|
| 获取单个字符 |
|
|
|
| 找不到返回-1(安全) |
|
|
|
| 找不到报错(不推荐) |
|
|
|
| 最简洁的存在判断 |
|
|
|
| 统计子串出现次数 |
s = "Python is powerful"
# 通过索引访问
print(s[0]) # 第一个字符
# 查找子串位置
print(s.find("is")) # 找到返回索引
print(s.find("Java")) # 找不到返回-1
print(s.index("is")) # 找到返回索引
# 判断子串是否存在
print("is" in s) # True
print("Java" not in s) # True
# 统计出现次数
print(s.count("o")) # 统计字母o出现次数

解释:find()找不到返回-1(推荐),index()找不到会报错。in运算符判断是否存在最简洁。
关键点:查询操作是安全的,不会改变原字符串。find()比index()更安全,避免程序崩溃。
四、字符串格式化技巧
| f-string |
|
| Python 3.6+,简洁高效 |
|
|
| 支持数字格式化 | |
|
|
|
| Python 2.7+,兼容性好 |
|
|
| 支持命名参数 | |
|
|
|
| 旧项目维护,了解即可 |
1. f-string(最推荐,Python 3.6+)
name = "小明"
age = 18
score = 95.5
# 基本用法
print(f"{name}今年{age}岁,考了{score}分")
# 格式化数字
print(f"π约等于{3.14159:.2f}") # 保留2位小数
print(f"通过率:{0.856:.1%}") # 百分比格式
print(f"学号:{101:05d}") # 补零到5位

解释:f-string在字符串前加f,用{}包裹变量,支持表达式计算和格式控制。
关键点:f-string可读性最好,效率最高,是Python 3.6+的首选方式。
2. format()方法
# 按位置
print("{}今年{}岁".format(name, age))
# 按名称
print("{n}的成绩是{s}分".format(n=name, s=score))
# 格式化
print("π约等于{:.2f}".format(3.14159))

解释:format()通过{}占位,可以按位置或名称填充,兼容性最好。
关键点:format()支持Python 2.7和3.x,适合需要兼容旧版本的项目。
3. %格式化(旧式,了解即可)
print("%s今年%d岁" % (name, age))
print("π约等于%.2f" % 3.14159)

解释:类似C语言的printf风格,使用%s、%d等占位符。
关键点:这种写法较老旧,新项目建议使用f-string。
五、其他常用方法
|
| 大小写转换 |
|
|
|
| 首字母大写 |
|
|
|
| 判断开头/结尾 |
|
|
|
| 判断字符类型 |
|
|
|
| 分割字符串 |
|
|
|
| 获取长度 |
|
|
s = "Python String Methods"
# 大小写转换
print(s.lower()) # 全小写
print(s.upper()) # 全大写
print(s.title()) # 首字母大写
# 判断方法
print(s.startswith("Py")) # 是否以Py开头
print(s.endswith("ods")) # 是否以ods结尾
print("123".isdigit()) # 是否全是数字
print("abc".isalpha()) # 是否全是字母
# 分割与合并
words = s.split() # 按空格分割
print(words)
new_s = "-".join(words) # 用-连接
print(new_s)

解释:大小写转换常用于不区分大小写的比较。split()默认按空白字符分割。判断方法常用于数据验证。
关键点:split()如果不传参数,会自动处理多个空格和制表符,非常智能。
六、重要特性:字符串不可变
s = "Python"
print(id(s)) # 查看内存地址
s = s + "编程"
print(id(s)) # 内存地址变了
# 原来的"Python"字符串还在内存中,只是变量s指向了新的字符串

解释:字符串一旦创建就不能修改。看起来是"修改"的操作,实际上是创建了新字符串。
关键点:频繁修改字符串(如在循环中用+连接)会影响性能,这种情况下建议使用列表和join()。
总结
- 创建:单双引号等价,三引号支持多行,
\转义,r创建原始字符串 - 切片:
[开始:结束:步长],左闭右开,支持负数索引 - 增删改查:
join()比+高效,find()比index()安全,查询用in最简洁 - 格式化:优先使用f-string,简洁直观效率高
- 不可变:字符串不能修改,"修改"操作会创建新字符串
(附录)Python字符串操作速查表
表1:字符串创建与访问
| 操作类型 | 语法/方法 | 示例代码 | 输出结果 | 关键点 |
| 创建 | 单/双引号 |
|
| 两者完全等价 |
| 三引号 |
|
| 支持换行和保留格式 | |
| 原始字符串 |
|
|
| |
| 切片 | 基本切片 |
|
| 左闭右开,含头不含尾 |
| 省略写法 |
|
| 缺省起始=0,缺省结束=末尾 | |
| 步长切片 |
|
| 步长2,隔一个取一个 | |
| 反向切片 |
|
| 步长为负,字符串反转 |
表2:增删改查方法
| 类别 | 方法/操作 | 示例代码 | 输出结果 | 关键点 |
| 增 |
|
|
| 少量连接方便,但效率低 |
|
|
|
| 连接列表高效,推荐! | |
| 删/改 |
|
|
| 替换内容,原字符串不变 |
|
|
|
| 去两端空格/指定字符 | |
|
|
|
| 仅去左端或右端 | |
| 查 | 索引访问 |
|
| 获取单个字符 |
|
|
|
| 找不到返回-1(安全) | |
|
|
|
| 找不到报错(不推荐) | |
|
|
|
| 最简洁的存在判断 | |
|
|
|
| 统计子串出现次数 |
表3:格式化方法对比
| 方法 | 语法示例 | 输出结果 | 适用场景 |
| f-string |
|
| Python 3.6+,简洁高效 |
|
|
| 支持数字格式化 | |
|
|
|
| Python 2.7+,兼容性好 |
|
|
| 支持命名参数 | |
|
|
|
| 旧项目维护,了解即可 |
表4:其他常用方法
| 方法 | 作用 | 示例 | 输出 |
|
| 大小写转换 |
|
|
|
| 首字母大写 |
|
|
|
| 判断开头/结尾 |
|
|
|
| 判断字符类型 |
|
|
|
| 分割字符串 |
|
|
|
| 获取长度 |
|
|
表5:字符串核心特性
| 特性 | 说明 | 示例 | 关键点 |
| 不可变性 | 字符串一旦创建不能修改 |
| 所有"修改"操作都返回新字符串 |
| 性能注意 | 循环中避免用 | 用 | 减少内存开销,提升速度 |
| 编码 | 默认Unicode |
| Python3直接支持中文,无需特殊处理 |
建议记忆顺序
-
优先掌握:f-string、
join()、find()、in判断、切片s[::-1] -
需要了解:
format()、split()、strip()、replace() -
注意事项:字符串不可变、循环内不用
+(因为会产生很多“中间对象”存放上一个字符,很浪费内存。)
总结:Python的字符串操作简单强大,我们记住f-string格式化、join连接、切片反转这三招,能解决我们80%的日常问题
1292

被折叠的 条评论
为什么被折叠?



