Python3 字符串超详细新手教程
字符串(str)是 Python 中最常用的数据类型之一,用来存储文本信息,比如名字、地址、文章内容等。本文从最基础的定义开始,覆盖索引、切片、常用方法、格式化等全部核心知识点,每个知识点都配可运行的代码和结果,零基础也能完全看懂。
一、什么是字符串
用引号包裹起来的文本内容就是字符串,在 Python 中类型为str。
- 引号必须是英文半角,中文引号会直接报错
- 引号必须成对出现,前后一致
- 字符串里的内容可以是中文、英文、数字、符号等任意文本
# 定义一个字符串 name = "小明" print(name) print(type(name)) # 查看类型:<class 'str'>二、字符串的 4 种定义方式
1. 单引号' '
s1 = 'Hello Python' print(s1)2. 双引号" "
s2 = "你好,世界" print(s2)💡 单引号和双引号没有本质区别,灵活搭配可以避免转义: 如果字符串内部有单引号,外面就用双引号;内部有双引号,外面就用单引号。
# 不用转义,更简洁 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四、字符串切片(截取子串,重点 + 难点)
切片就是从字符串中截取一段连续的字符,得到一个新的子字符串。
语法格式
字符串[起始索引:结束索引:步长]核心规则(必背)
- 左闭右开:包含起始索引的字符,不包含结束索引的字符
- 三个参数都可以省略,有默认值:
- 起始索引省略:默认从开头(索引 0)开始
- 结束索引省略:默认截取到末尾
- 步长省略:默认步长为 1,一个挨着一个取
- 步长为负数:从右往左反向取
- 切片不会报错,超出范围会自动截断
基础示例
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. 省略起始:从开头到索引3 print(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,反向取,步长-1 print(s[5:1:-1]) # fedc五、字符串基础运算
1. 拼接:+
把两个字符串首尾连在一起,生成新字符串。
a = "Hello" b = "Python" res = a + " " + b print(res) # Hello Python⚠️新手大坑:字符串不能直接和数字相加,必须先把数字转成字符串。
# 错误写法,直接报错 # print("年龄:" + 18) # 正确写法 print("年龄:" + str(18)) # 年龄:182. 重复:*
把字符串重复 N 次,生成新字符串。
print("加油!" * 3) # 加油!加油!加油! print("-" * 20) # 打印20个减号,做分割线3. 成员运算:in/not in
判断一个字符 / 子串是否在字符串中,返回布尔值True/False。
s = "Hello Python" print("P" in s) # True print("python" in s) # False 区分大小写 print("abc" not in s)# True4. 求长度: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()) # True2. 查找统计类方法
| 方法 | 作用 |
|---|---|
find(子串) | 查找子串第一次出现的索引,找不到返回 -1 |
index(子串) | 查找子串第一次出现的索引,找不到直接报错 |
count(子串) | 统计子串出现的次数 |
示例
s = "hello python hello world" print(s.find("hello")) # 0 第一次出现的位置 print(s.find("abc")) # -1 找不到返回-1 print(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 WORLD print(word.lower()) # hello world4. 分割与拼接
① 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 = 18 score = 95.5 msg = "姓名:%s,年龄:%d,成绩:%.1f" % (name, age, score) print(msg) # 输出:姓名:小明,年龄:18,成绩:95.5方式 2:format () 方法(兼容老版本)
用{}占位,后面.format()里填变量。
name = "小红" age = 17 msg = "姓名:{},年龄:{}岁".format(name, age) print(msg)方式 3:f-string(主推,最常用)
在字符串前加f,直接把变量、表达式写在{}里,直观又简洁。
name = "小刚" age = 19 # 直接放变量 print(f"姓名:{name},年龄:{age}") # 可以放表达式 print(f"明年年龄:{age + 1}") # 格式化数字:保留2位小数 price = 9.999 print(f"价格:{price:.2f} 元") # 价格:10.00 元 # 百分比显示 rate = 0.856 print(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十、新手高频易错点总结
- 引号不成对、用中文引号:前后引号必须一致,且是英文半角
- 索引越界:索引从 0 开始,最大索引是「长度 - 1」
- 字符串和数字直接相加:必须用
str()转成字符串再拼接 - 以为方法会修改原字符串:所有字符串方法都返回新串,原串不变
- 切片记不住左闭右开:记住结束索引的字符永远取不到
- 路径里的反斜杠被转义:写文件路径记得加
r用原始字符串 - 大小写敏感:
"A"和"a"是不同的字符,判断、查找都区分大小写