7.2 Python3序列 | 字符串操作:常用方法与格式化技巧

字符串是Python中最常用的数据类型之一。今天我们来讲讲字符串的核心操作。

一、字符串的创建

1.Python中创建字符串非常简单,用引号来创建。

python 复制代码
# 单引号、双引号、三引号
s1 = '你好'
s2 = "世界"
s3 = """多行
字符串"""

print(s1, s2)
print(s3)

单引号 ( ' )和双引号(" )完全等价,三引号('' '' '')可以创建多行字符串。

2.如果字符串中包含引号,可以用另一种引号包围,或者用转义字符\

python 复制代码
# 转义字符示例
s4 = 'I\'m a student'  # 用\'表示单引号
s5 = "路径:C:\\Users\\Test"  # \\表示反斜杠
s6 = r"路径:C:\Users\Test"  # 原始字符串,r前缀让转义失效

print(s4)
print(s5)
print(s6)

解释\是转义字符,r前缀创建原始字符串,常用于正则表达式和文件路径。

关键点:原始字符串适用于不需要转义的场合,代码更简洁。


二、字符串切片操作

切片是字符串的核心操作,语法为:字符串[开始:结束:步长]

1.基础切片

python 复制代码
s = "Python编程"

# 基础切片
print(s[0:6])      # 从0开始,到6结束(不包含6)
print(s[:6])       # 省略开始,默认为0
print(s[6:])       # 省略结束,默认为末尾
print(s[:])        # 省略开始和结束,复制整个字符串

切片结果包含开始位置,不包含结束位置。省略开始或结束时使用默认值。

2.有步长的切片

步长默认为1,可以是负数,表示反向切片。

python 复制代码
# 步长应用
print(s[::2])      # 步长为2,隔一个取一个
print(s[::-1])     # 步长为-1,字符串反转
print(s[-2:])      # 负数索引,从右往左数

解释:正数索引从0开始,负数索引从-1开始(最右边)。步长为负时,字符串反转。

关键点:负数索引非常实用,-1代表最后一个字符,-2代表倒数第二个。


三、字符串的增删改查

1. 增加字符串

python 复制代码
# 方法一:+ 运算符(连接)
s1 = "Hello"
s2 = "World"
result = s1 + " " + s2
print(result)

# 方法二:join() 方法
words = ["Python", "is", "awesome"]
sentence = " ".join(words)
print(sentence)

# join效率更高,尤其适合连接多个字符串

解释+适合少量字符串连接,join()方法效率更高,特别适合连接列表中的多个字符串。

关键点join()前面的字符串是连接符,可以是空格、逗号等任意字符。

2. 删除和修改字符串

python 复制代码
s = "  Hello Python  "

# 去除空白字符
print(s.strip())      # 去除两边空格
print(s.lstrip())     # 去除左边空格
print(s.rstrip())     # 去除右边空格

# 删除特定内容(用replace替换为空)
email = "test@example.com"
print(email.replace("@", ""))  # 删除@符号

解释strip()系列方法用于去除两端字符(默认是空格)。replace()可以替换或删除字符。

关键点:字符串不可变,这些方法都返回新字符串,原字符串不变。

3. 查询字符串

python 复制代码
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()更安全,避免程序崩溃。


四、字符串格式化技巧

1. f-string(最推荐,Python 3.6+)

python 复制代码
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()方法

python 复制代码
# 按位置
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. %格式化(旧式,了解即可)

python 复制代码
print("%s今年%d岁" % (name, age))
print("π约等于%.2f" % 3.14159)

解释 :类似C语言的printf风格,使用%s%d等占位符。

关键点:这种写法较老旧,新项目建议使用f-string。


五、其他常用方法

python 复制代码
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()如果不传参数,会自动处理多个空格和制表符,非常智能。


六、重要特性:字符串不可变

python 复制代码
s = "Python"
print(id(s))      # 查看内存地址

s = s + "编程"
print(id(s))      # 内存地址变了

# 原来的"Python"字符串还在内存中,只是变量s指向了新的字符串

解释:字符串一旦创建就不能修改。看起来是"修改"的操作,实际上是创建了新字符串。

关键点 :频繁修改字符串(如在循环中用+连接)会影响性能,这种情况下建议使用列表和join()


总结

  1. 创建 :单双引号等价,三引号支持多行,\转义,r创建原始字符串
  2. 切片[开始:结束:步长],左闭右开,支持负数索引
  3. 增删改查join()+高效,find()index()安全,查询用in最简洁
  4. 格式化优先使用f-string,简洁直观效率高
  5. 不可变:字符串不能修改,"修改"操作会创建新字符串

(附录)Python字符串操作速查表

表1:字符串创建与访问

|--------|-------|--------------------|-----------------|----------------|
| 操作类型 | 语法/方法 | 示例代码 | 输出结果 | 关键点 |
| 创建 | 单/双引号 | s = "Python" | Python | 两者完全等价 |
| | 三引号 | s = """多行\n文本""" | 多行 文本 | 支持换行和保留格式 |
| | 原始字符串 | s = r"C:\test" | C:\test | r前缀取消转义,适合路径 |
| 切片 | 基本切片 | s[0:6] | Python | 左闭右开,含头不含尾 |
| | 省略写法 | s[:6] / s[6:] | Python / 编程 | 缺省起始=0,缺省结束=末尾 |
| | 步长切片 | s[::2] | Pto | 步长2,隔一个取一个 |
| | 反向切片 | s[::-1] | 码编nohtyP | 步长为负,字符串反转 |


表2:增删改查方法

|-------------------------|-------------------|--------------------------|-------------|-------------|
| 类别 | 方法/操作 | 示例代码 | 输出结果 | 关键点 |
| | +连接 | "Hi" + " Python" | Hi Python | 少量连接方便,但效率低 |
| | join() | " ".join(["a","b"]) | a b | 连接列表高效,推荐! |
| 删/改 | replace() | s.replace("Py","Java") | Java | 替换内容,原字符串不变 |
| | strip() | " hi ".strip() | hi | 去两端空格/指定字符 |
| lstrip() / rstrip() | " hi ".rstrip() | hi | 仅去左端或右端 | |
| | 索引访问 | s[0] | P | 获取单个字符 |
| | find() | s.find("is") | 7 | 找不到返回-1(安全) |
| | index() | s.index("is") | 7 | 找不到报错(不推荐) |
| | in判断 | "Py" in s | True | 最简洁的存在判断 |
| | count() | s.count("o") | 2 | 统计子串出现次数 |


表3:格式化方法对比

|--------------------|---------------------------------|------------|------------------|
| 方法 | 语法示例 | 输出结果 | 适用场景 |
| f-string (最推荐) | f"{name}考{score}分" | 小明考95.5分 | Python 3.6+,简洁高效 |
| | f"{pi:.2f}" | 3.14 | 支持数字格式化 |
| format() | "{}{}".format(a,b) | ab | Python 2.7+,兼容性好 |
| | "{n}:{s}".format(n="年龄",s=18) | 年龄:18 | 支持命名参数 |
| %格式化 | "%s:%d" % ("年龄",18) | 年龄:18 | 旧项目维护,了解即可 |


表4:其他常用方法

|-------------------------------|---------|-----------------------------|-----------------|
| 方法 | 作用 | 示例 | 输出 |
| lower() / upper() | 大小写转换 | "Python".upper() | PYTHON |
| title() / capitalize() | 首字母大写 | "hello world".title() | Hello World |
| startswith() / endswith() | 判断开头/结尾 | "test.py".endswith(".py") | True |
| isdigit() / isalpha() | 判断字符类型 | "123".isdigit() | True |
| split() | 分割字符串 | "a,b,c".split(",") | ['a','b','c'] |
| len() | 获取长度 | len("Python") | 6 |


表5:字符串核心特性

|----------|-------------|-----------------------|----------------------|
| 特性 | 说明 | 示例 | 关键点 |
| 不可变性 | 字符串一旦创建不能修改 | s = "a"; id(s) 地址改变 | 所有"修改"操作都返回新字符串 |
| 性能注意 | 循环中避免用+连接 | 用list存结果再用join() | 减少内存开销,提升速度 |
| 编码 | 默认Unicode | s = "中文" | Python3直接支持中文,无需特殊处理 |


建议记忆顺序

  1. 优先掌握 :f-string、join()find()in判断、切片s[::-1]
  2. 需要了解format()split()strip()replace()
  3. 注意事项 :字符串不可变、循环内不用+

一句话总结 :Python的字符串操作简单强大,记住f-string格式化join连接切片反转这三招,能解决我们80%的日常问题!

相关推荐
我命由我123452 小时前
Python 开发 - OpenAI 兼容阿里云百炼平台 API
开发语言·人工智能·后端·python·阿里云·ai·语言模型
littlezls2 小时前
在VSCode中运行Python脚本文件时如何传参
vscode·python
@#---2 小时前
爬取b站的网页信息
爬虫·python
liwulin05063 小时前
【PYTHON】python venv创建虚拟环境,非conda
开发语言·python·conda
IT·小灰灰3 小时前
当AI开口说话:可灵视频2.6如何终结“默片时代“重塑视听共生
大数据·人工智能·python·深度学习·数据挖掘·开源·音视频
2401_841495643 小时前
【LeetCode刷题】缺失的第一个正数
数据结构·python·算法·leetcode·数组·哈希·缺失最小正整数
Python极客之家3 小时前
基于数据挖掘的中风智能预测系统
人工智能·python·数据挖掘·毕业设计·课程设计
C++业余爱好者3 小时前
Java 中的数据结构详解及应用场景
java·数据结构·python
测试19983 小时前
软件测试方法之边界值分析法
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例