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

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

目录

一、字符串的创建

二、字符串切片操作

三、字符串的增删改查

四、字符串格式化技巧

五、其他常用方法

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

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


一、字符串的创建

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

单/双引号

s = "Python"

Python

两者完全等价

三引号

s = """多行\n文本"""

多行
文本

支持换行和保留格式

# 单引号、双引号、三引号
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回车符让光标移动到当前行的开头。

转义字符总结:

  1. 让特殊符号“变回”普通符号(如 \'\"\\)。
  2. 搭配某些字母,会“变成”特殊指令(如 \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. 增加字符串

+连接

"Hi" + " Python"

Hi Python

少量连接方便,但效率低

join()

" ".join(["a","b"])

a b

连接列表高效,推荐!

# 方法一:+ 运算符(连接)
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. 删除和修改字符串

strip()

去两端空格/指定字符

lstrip() / rstrip()

仅去左端或右端

replace()

替换内容,原字符串不变

s = "  Hello Python  "

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

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

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

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

3. 查询字符串

索引访问

s[0]

P

获取单个字符

find()

s.find("is")

7

找不到返回-1(安全)

index()

s.index("is")

7

找不到报错(不推荐)

in判断

"Py" in s

True

最简洁的存在判断

count()

s.count("o")

2

统计子串出现次数

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
(最推荐)

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

旧项目维护,了解即可

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。


五、其他常用方法

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

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()


总结

  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%的日常问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值