Python 字符串 str 完整学习笔记
- 一、字符串编码转换
-
- [1.1 常见编码格式](#1.1 常见编码格式)
- [1.2 encode()编码、decode()编码](#1.2 encode()编码、decode()编码)
- 二、字符串运算符
-
- [2.1 `+` 字符串拼接](#2.1
+字符串拼接) - [2.2 * 字符串重复](#2.2 * 字符串重复)
- [2.3 成员运算符 `in/not in`](#2.3 成员运算符
in/not in)
- [2.1 `+` 字符串拼接](#2.1
- 三、下标(索引)取值
- 五、字符串常用内置方法
-
- [5.1 查找:find()与index()](#5.1 查找:find()与index())
- [5.2 count()统计子串出现次数](#5.2 count()统计子串出现次数)
- [5.3 replace()字符串替换](#5.3 replace()字符串替换)
- [5.4 split()分割字符串](#5.4 split()分割字符串)
- [5.5 大小写转换](#5.5 大小写转换)
- 六、字符串判断类方法(返回True/False)
-
- [6.1 startswith() / endswith()](#6.1 startswith() / endswith())
- [6.2 isupper() / islower()](#6.2 isupper() / islower())
前言
字符串 str是Python最常用的数据类型,用来保存文本。本篇整理课堂全部知识点:编码基础、运算符、索引下标、切片、查找、修改、分割、判断、记录实操中容易踩的坑。
一、字符串编码转换
1.1 常见编码格式
- ASCII:只包含数字、大小写英文字母、符号,不支持中文。
- GBK / GB2312:国内中文编码;英文占 1 字节,中文占 2 字节。
- Unicode 万国码:统一收纳全世界所有字符;普通字符占 2 字节,生僻字符 4 字节;转换速度快,但占用内存大。
- UTF‑8(工作最常用):国际通用;英文 1 字节,汉字通常 3 字节,生僻字 4‑6 字节;节省存储空间,转换计算开销更大
重点区分:
str:人类可读的字符串;bytes:计算机底层二进制字节;
✅ str 与 bytes 不能直接拼接,需要互相转换。
1.2 encode()编码、decode()编码
字符串.encode("编码格式"):str → bytes,把人类文本转为计算机二进制。字节对象.decode("编码格式"):bytes → str,二进制转回可读字符串。
python
a='hello'
print(type(a)) #<class 'str'>
a1 = a.encode() # 默认utf-8编码
print(a1) # b'hello'
print(type(a1)) #<class 'bytes'>
a2=a1.decode()
print(a2) # hello
print(type(a2)) # <class 'str'>
# 中文示例
st = "你今天真好看"
st1 = st.encode('utf-8')
print(st1) #b'\xe4\xbd\xa0\xe4\xbb\x8a\xe5\xa4\xa9\xe7\x9c\x9f\xe5\xa5\xbd\xe7\x9c\x8b'
st2 = st1.decode("utf-8")
print(st2) #你今天真好看
⚠️坑:编码和解码格式必须一致,否则出现乱码。
二、字符串运算符
2.1 + 字符串拼接
注意:+两边必须全部是字符串,不能直接字符串 + 数字。
python
print("美"+"女") # 美女
print('1'+'1') # 11 字符串拼接,不是数字加法
2.2 * 字符串重复
字符串 * 整数,把字符串重复 N 次生成新字符串。
python
print("美女" * 3) # 美女美女美女
print("-"*10) # ---------- 快速生成分割线
2.3 成员运算符 in/not in
判断子串是否存在 在目标字符串,返回布尔True / False,大小写敏感。
子串 in 字符串:包含返回 True子串 not in 字符串:不包含返回 True
python
name = "bingbing"
print("b" in name) # True
print("a" not in name) # True
print("冰冰" in "周游") # False
三、下标(索引)取值
字符串属于不可变序列 ,可以通过下标拿到单个字符;不能通过下标修改字符,会直接报错
- 正向索引:从左向右,从 0 开始计数:0,1,2,3...
- 负向索引:从右向左,从‑1 开始计数:‑1,-2,-3... ,
‑1代表最后一位字符。
python
name = "ziyi"
print(name[0]) # z
print(name[-1]) # i,取最后一个字符
⚠️踩坑:索引超出范围,报IndexError
python
# name只有4个字符,下标0‑3,-1~-4
print(name[4]) # IndexError 越界报错
print(name[-5]) # IndexError 越界报错
四、、切片(重难点)
切片:截取字符串一部分,返回新字符串,原始字符串不会改变 。
语法:字符串[start:end:step]
核心规则:包前不包后(左闭右开[start,end)),包含 start 下标,不包含 end 下标 。
参数说明:
start:起始下标,省略默认从头开始;end:结束下标,省略默认截取到末尾;step步长:间隔;正数 =从左往右 取;负数 =从右往左取;默认 step=1。
python
name = "sixstar"
print(name[0:3]) # six 0,1,2
print(name[-5:-2]) # xst
# step为负数,反向截取
print(name[-2:-5:-1]) # ats
# 常用简写
print(name[:]) # 全部截取,复制整个字符串
print(name[:-4]) # 从开头截取到倒数第4位之前
print(name[-4:]) # 从倒数第4位,一直截取到末尾
print(name[::2]) # 从头到尾,步长2,隔一个取一个
⚠️坑:步长正负决定方向。如果方向不匹配,切片得到空字符串。
例:name[-2:-5] step 默认是 1(从左向右),起点‑2 在终点‑5 右边,方向冲突 → 返回空字符串。
五、字符串常用内置方法
重要:字符串是不可变对象,find、replace、split、count全部不会修改原字符串,会返回处理后的新字符串,需要用变量接收结果。
5.1 查找:find()与index()
方法签名:find(子串, start=0, end=len(str))
find():找到返回子串第一个字符的下标 ;找不到返回‑1,不会报错。index():找到返回下标;找不到直接抛 ValueError 异常。- start、end 可选,限定查找区间,依旧包前不包后。
python
name = "bingbing"
print(name.find("i")) # 1
print(name.find("bing")) # 0
print(name.find("b", 3)) # 4 从下标3开始查找
print(name.find('x')) # -1 找不到返回‑1
print(name.index("i")) #1
# print(name.index("x")) # 找不到直接报错!
💡实操建议:不确定子串是否存在优先用find,避免程序崩溃。
5.2 count()统计子串出现次数
count(子串, start, end):统计子串在范围内出现多少次;没有出现返回 0。
python
name = "bingbing"
print(name.count('b')) #2
print(name.count("a")) #0
print(name.count('b',1)) #1 从下标1开始统计
5.3 replace()字符串替换
replace(旧子串,新子串,替换次数)
- 替换次数省略:全部替换;传入数字 N,只替换前 N 处。
- 返回新字符串,原始字符串不变。
python
text = "好好学习,天天向上"
print(text.replace('天','时')) # 好好学习,时时向上
print(text.replace('天','时',1)) # 只替换1次:好好学习,时天向上
5.4 split()分割字符串
split(分隔符, maxsplit=分割次数)
- 将字符串按照指定分隔符切开,返回列表 list。
- 如果字符串不存在分隔符:返回只包含原字符串的列表。
- maxsplit:设置最大切割次数。
python
st = "hello,python"
print(st.split(',')) # ['hello', 'python']
print(st.split("a")) # ['hello,python'],找不到分隔符
print(st.split('o')) # ['hell', ',pyth', 'n'] 全部切割
print(st.split('o',1)) # ['hell', ',python'] 只切1次
5.5 大小写转换
capitalize():字符串第一个字符大写,其余全部小写。lower():全部字母转为小写。upper():全部字母转为大写。
python
name = "BingBing"
print(name.lower()) # bingbing
print(name.upper()) # BINGBING
六、字符串判断类方法(返回True/False)
6.1 startswith() / endswith()
startswith(子串, start, end):判断是否以指定子串开头,可以指定查找下标范围。endswith(子串, start, end):判断是否以指定子串结尾。
python
st = "sixstar"
print(st.startswith("s")) # True
print(st.startswith("six")) # True
print(st.endswith("r")) # True
6.2 isupper() / islower()
isupper():判断字符串全部英文字母是否大写;没有字母返回 False。islower():判断字符串全部英文字母是否小写;没有字母返回 False。
python
st = 'sixstar'
print(st.islower()) # True
print(st.isupper()) # False
st1 = "SIXSTAR"
print(st1.isupper()) # True