Python3 字符串超详细新手教程
字符串(str)是 Python 中最常用的数据类型之一,用来存储文本信息,比如名字、地址、文章内容等。本文从最基础的定义开始,覆盖索引、切片、常用方法、格式化等全部核心知识点,每个知识点都配可运行的代码和结果,零基础也能完全看懂。
一、什么是字符串
用引号包裹起来的文本内容就是字符串,在 Python 中类型为 str。
- 字符串里的内容可以是中文、英文、数字、符号等任意文本
# 定义一个字符串name = "小明"print(name)print(type(name)) # 查看类型:<class 'str'>
二、字符串的 4 种定义方式
1. 单引号 ' '
s1 = 'Hello Python'print(s1)
2. 双引号 " "
💡 单引号和双引号没有本质区别,灵活搭配可以避免转义: 如果字符串内部有单引号,外面就用双引号;内部有双引号,外面就用单引号。
# 不用转义,更简洁msg = "I'm a student" # 内部有单引号,外面用双引号print(msg)info = '他说:"明天放假"' # 内部有双引号,外面用单引号print(info)
3. 三引号 ''' ''' / """ """
用来定义多行字符串,会保留原文的换行和空格格式,也可以当作多行注释使用。
poem = """静夜思床前明月光,疑是地上霜。举头望明月,低头思故乡。"""print(poem)
运行后会完整保留换行格式,输出整首诗。
4. 原始字符串 r'' / r""
字符串前加字母 r,表示取消所有转义字符,里面的内容会原样输出。 最常用场景:写文件路径、正则表达式,避免反斜杠被识别成转义符。
# 普通字符串:\t 会被识别成制表符path1 = "C:\new\test.txt"print(path1) # 输出会换行、出现制表符,结果错乱# 原始字符串:原样输出,路径正常path2 = r"C:\new\test.txt"print(path2) # C:\new\test.txt 完全正确
三、字符串的索引(下标取字符)
字符串是有序的字符序列,每个字符都有一个编号,这个编号就叫「索引 / 下标」。
核心规则
- 正向索引:从左往右,从 0 开始编号
- 反向索引:从右往左,从 -1 开始编号
- 只能通过索引取值,不能通过索引修改字符(字符串不可变,后面会讲)
示例演示
s = "Python"# 字符: P y t h o n# 正向: 0 1 2 3 4 5# 反向:-6-5-4-3-2-1# 正向索引print(s[0]) # P 第1个字符print(s[2]) # t 第3个字符# 反向索引print(s[-1]) # n 最后1个字符print(s[-3]) # h 倒数第3个字符
❌ 新手易错:索引越界
字符串长度是 6,最大正向索引是 5,写 s[6] 会报错:
print(s[6])# 报错:IndexError: string index out of range
四、字符串切片(截取子串,重点 + 难点)
切片就是从字符串中截取一段连续的字符,得到一个新的子字符串。
语法格式
核心规则(必背)
- 左闭右开
基础示例
s = "abcdefg"# 索引:a b c d e f g# 0 1 2 3 4 5 6# 1. 截取索引1到4(包含1,不包含4)print(s[1:4]) # bcd# 2. 省略起始:从开头到索引3print(s[:3]) # abc# 3. 省略结束:从索引2到末尾print(s[2:]) # cdefg# 4. 全省略:复制整个字符串print(s[:]) # abcdefg
带步长的切片
s = "abcdefg"# 步长为2:隔一个取一个print(s[::2]) # aceg# 步长为-1:反转字符串(最常用技巧)print(s[::-1]) # gfedcba# 从索引5到1,反向取,步长-1print(s[5:1:-1]) # fedc
五、字符串基础运算
1. 拼接:+
把两个字符串首尾连在一起,生成新字符串。
a = "Hello"b = "Python"res = a + " " + bprint(res) # Hello Python
⚠️ 新手大坑:字符串不能直接和数字相加,必须先把数字转成字符串。
# 错误写法,直接报错# print("年龄:" + 18)# 正确写法print("年龄:" + str(18)) # 年龄:18
2. 重复:*
把字符串重复 N 次,生成新字符串。
print("加油!" * 3) # 加油!加油!加油!print("-" * 20) # 打印20个减号,做分割线
3. 成员运算:in / not in
判断一个字符 / 子串是否在字符串中,返回布尔值 True/False。
s = "Hello Python"print("P" in s) # Trueprint("python" in s) # False 区分大小写print("abc" not in s)# True
4. 求长度:len()
统计字符串中字符的个数。
s = "Python编程"print(len(s)) # 8 中文、英文都算1个字符
六、转义字符
在字符串中,一些特殊的字符无法直接打出来,需要用 \ 加字母来表示,这就是转义字符。
| |
|---|
\n | |
\t | 制表符(相当于按一下 Tab 键,缩进 4/8 个空格) |
\\ | |
\' | |
\" | |
示例演示
# 换行print("第一行\n第二行\n第三行")# 制表符对齐print("姓名\t年龄\t成绩")print("小明\t18\t95")print("小红\t17\t98")# 输出反斜杠print("C:\\Users\\桌面")
💡 不想用转义字符,就在字符串前加 r,用原始字符串,前面已经讲过。
七、字符串常用内置方法
字符串自带非常多工具方法,用来处理文本。注意:字符串是不可变类型,所有修改类的方法,都是返回新字符串,原字符串不会改变。
1. 判断类方法(返回 True/False)
| |
|---|
startswith(子串) | |
endswith(子串) | |
isalpha() | |
isdigit() | |
isspace() | |
isupper() | |
islower() | |
示例
filename = "test.py"print(filename.endswith(".py")) # True 判断是不是Python文件num_str = "12345"print(num_str.isdigit()) # True 判断是不是纯数字字符串word = "HELLO"print(word.isupper()) # True
2. 查找统计类方法
| |
|---|
find(子串) | |
index(子串) | |
count(子串) | |
示例
s = "hello python hello world"print(s.find("hello")) # 0 第一次出现的位置print(s.find("abc")) # -1 找不到返回-1print(s.count("hello")) # 2 出现了2次
3. 修改处理类方法(返回新字符串)
| |
|---|
replace(旧子串, 新子串, 替换次数) | |
strip() | |
lstrip() | |
rstrip() | |
upper() | |
lower() | |
capitalize() | |
示例
# 替换s = "我喜欢Java,Java很好学"new_s = s.replace("Java", "Python")print(new_s) # 我喜欢Python,Python很好学# 去空格user = " 小明 \n"print(user.strip()) # 小明 首尾空白全去掉# 大小写转换word = "Hello World"print(word.upper()) # HELLO WORLDprint(word.lower()) # hello world
4. 分割与拼接
① split () 分割:字符串 → 列表
按指定分隔符把字符串拆成列表,默认按空格分割。
# 按空格分割s = "苹果 香蕉 橙子 西瓜"fruits = s.split()print(fruits) # ['苹果', '香蕉', '橙子', '西瓜']# 按逗号分割data = "小明,18,男,90分"info = data.split(",")print(info) # ['小明', '18', '男', '90分']
② join () 拼接:列表 → 字符串
用指定字符串把列表中的元素拼接成一个完整字符串。
lst = ["北京", "上海", "广州", "深圳"]# 用逗号连接res = ",".join(lst)print(res) # 北京,上海,广州,深圳# 用短横线连接res2 = "-".join(lst)print(res2) # 北京-上海-广州-深圳
八、字符串格式化(重点,日常开发必用)
把变量、表达式动态拼接到字符串里,有三种方式,主推 f-string(Python3.6+ 支持,最简洁好用)。
方式 1:% 占位符(老式写法,了解即可)
用 %s 占字符串位、%d 占整数位、%f 占浮点位。
name = "小明"age = 18score = 95.5msg = "姓名:%s,年龄:%d,成绩:%.1f" % (name, age, score)print(msg)# 输出:姓名:小明,年龄:18,成绩:95.5
方式 2:format () 方法(兼容老版本)
用 {} 占位,后面 .format() 里填变量。
name = "小红"age = 17msg = "姓名:{},年龄:{}岁".format(name, age)print(msg)
方式 3:f-string(主推,最常用)
在字符串前加 f,直接把变量、表达式写在 {} 里,直观又简洁。
name = "小刚"age = 19# 直接放变量print(f"姓名:{name},年龄:{age}")# 可以放表达式print(f"明年年龄:{age + 1}")# 格式化数字:保留2位小数price = 9.999print(f"价格:{price:.2f} 元") # 价格:10.00 元# 百分比显示rate = 0.856print(f"完成率:{rate:.1%}") # 完成率:85.6%
九、字符串的核心特性:不可变性
Python 的字符串是不可变类型,意思是:字符串一旦创建,里面的字符就不能修改、删除、增加。
示例验证
s = "hello"# ❌ 错误:尝试通过索引修改字符,直接报错s[0] = "H"# 报错:TypeError: 'str' object does not support item assignment
正确的修改方式
生成一个新字符串,重新赋值给变量。
s = "hello"# 方式1:重新赋值s = "Hello"# 方式2:用replace生成新字符串s = s.replace("h", "H")print(s) # Hello
十、新手高频易错点总结
- 引号不成对、用中文引号
- 索引越界
- 字符串和数字直接相加
- 以为方法会修改原字符串
- 切片记不住左闭右开
- 路径里的反斜杠被转义
- 大小写敏感:
"A" 和 "a" 是不同的字符,判断、查找都区分大小写