Python 字符串 str 完整学习笔记

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)
  • 三、下标(索引)取值
  • 五、字符串常用内置方法
    • [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 常见编码格式

  1. ASCII:只包含数字、大小写英文字母、符号,不支持中文。
  2. GBK / GB2312:国内中文编码;英文占 1 字节,中文占 2 字节。
  3. Unicode 万国码:统一收纳全世界所有字符;普通字符占 2 字节,生僻字符 4 字节;转换速度快,但占用内存大。
  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

三、下标(索引)取值

字符串属于不可变序列 ,可以通过下标拿到单个字符;不能通过下标修改字符,会直接报错

  1. 正向索引:从左向右,从 0 开始计数:0,1,2,3...
  2. 负向索引:从右向左,从‑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 下标 。

参数说明:

  1. start:起始下标,省略默认从头开始;
  2. end:结束下标,省略默认截取到末尾;
  3. 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
相关推荐
海绵宝宝转agent8 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭8 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
每天都要写算法(努力版)9 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
小小龙学IT9 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_962071579 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境10 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路10 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师10 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师10 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia62611 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信