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
相关推荐
troy1281 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
我不会起名字3222 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
ThornArmor3 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
毕业设计7033 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
kyrie_sakura3 小时前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy
测试老哥3 小时前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
Zenova EdgeOS3 小时前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
caoerzhong4 小时前
JeeWMS 开源仓库管理系统权限与域验证解析:Java WMS 如何把数据权限管到仓、货主与人
java·python·开源·vue
一木 之林4 小时前
Miniconda 安装与 Jupyter 使用入门
ide·python·jupyter