前言

前面我们折腾了数字、运算符、循环、时间……但有一个很重要的东西一直没好好聊——字符串

字符串是啥?就是你看到的所有文字"你好"'Python'"""这是一段话""",统统都是。

你平时写代码,至少有一半时间在跟字符串打交道:打印输出、取用户输入、读文件、拼消息……字符串玩不转,代码写起来就跟不会用筷子的老外吃中餐一样——费劲。

今天这一篇,我们分三个板块把字符串彻底盘一遍:① 字符串的声明与转义② 索引、遍历与切片③ 字符串的常用操作方法

看完之后,字符串在你手里就跟玩魔方一样,想怎么转就怎么转。开始!🧵


一、字符串的声明与转义

1.1 三种声明方式

Python 里声明字符串特别灵活,单引号双引号三引号,随便用:

python

# 单引号
s1 = 'hello'

# 双引号
s2 = "world"

# 三引号(可以换行写)
s3 = """这是
一段
多行字符串"""

print(s1)   # hello
print(s2)   # world
print(s3)   # 这是\n一段\n多行字符串

💡 什么时候用哪个? 字符串里有单引号就用双引号包,有双引号就用单引号包,省得转义。比如 "I'm fine" 和 '他说:"你好"'

1.2 三引号的特殊用途 —— 文档注释

三引号还有个重要身份:文档注释。放在文件开头、函数里面、类里面,用来写说明文档。

python

"""
这个文件用来处理用户数据的增删改查
作者:糕手
创建时间:2026-07-15
"""

def add_user(name):
    """
    添加一个新用户
    参数:name —— 用户名
    返回:添加成功返回 True,失败返回 False
    """
    pass

class User:
    """用户类,封装用户的基本信息"""
    pass

这些注释在 IDE 里会显示提示,团队协作时非常有用。

1.3 转义字符 —— 那些需要“特殊处理”的符号

有些字符在字符串里有特殊含义,比如换行、缩进、引号本身。这时候就需要转义字符——前面加个反斜杠 \,让它“变身”。

转义符含义
\\输出反斜杠本身
\'输出单引号
\"输出双引号
\n换行
\t制表符(缩进)

print("你好\n世界")      # 你好 换行 世界
print("姓名\t年龄")      # 姓名    年龄(中间有个缩进)
print("他说:\"Python 很好学\"")   # 他说:"Python 很好学"
print("C:\\Users\\Admin")          # C:\Users\Admi

1.4 r"" —— 让转义字符“失效”

如果不想让 \ 起作用(比如文件路径、正则表达式),前面加个 r

python

path = r"C:\Users\Administrator\Desktop"
print(path)   # C:\Users\Administrator\Desktop(\ 全部原样输出)

# 不加 r 的话,\U 会被当成 Unicode 转义,直接报错

二、索引、遍历与切片

2.1 索引 —— 每个字符都有“门牌号”

字符串里的每个字符都对应一个位置,从 0 开始编号:

python

hero = "王者荣耀亚瑟"
#       0 1 2 3 4 5

print(len(hero))    # 6(字符串长度)
print(hero[0])      # 王
print(hero[3])      # 荣
print(hero[5])      # 瑟

负数索引:从右往左数,-1 是最后一个:

python

print(hero[-1])     # 瑟
print(hero[-6])     # 王

🎮 打个王者荣耀的比方:索引就是英雄的“铭文页编号”,第 0 页是“王”,第 1 页是“者”,想去哪页就去哪页。

2.2 遍历 —— 把每个字符走一遍

方式一:直接遍历

python

hero = "王者荣耀亚瑟"
for e in hero:
    print(e)

输出:

text

王
者
荣
耀
亚
瑟

方式二:通过索引遍历(需要用到长度)

python

for i in range(len(hero)):
    print(i, hero[i])

输出:

text

0 王
1 者
2 荣
3 耀
4 亚
5 瑟

2.3 切片 —— 切出你想要的那一段

切片语法:[start:stop:step]

  • start:起始位置(包含)

  • stop:结束位置(不包含)

  • step:步长(默认为 1)

python

hero = "王者荣耀亚瑟"

print(hero[2:])      # 荣耀亚瑟(从索引2到最后)
print(hero[:2])      # 王者(从开头到索引1)
print(hero[2:4])     # 荣耀(索引2到3)
print(hero[2:5:2])   # 荣亚(步长为2,隔一个取一个)

负数步长(倒着取)

python

print(hero[-3:-1])   # 耀亚(从倒数第3到倒数第2)
print(hero[4:1:-1])  # 亚耀荣(从4倒着取到2)

2.4 实战:判断一个字符串是否对称

比如检测一个英雄名字是不是“回文”(正着读反着读都一样):

python

# 比如 "貂蝉" 就是对称的,"亚瑟" 也是对称的
# 但 "王者荣耀" 就不是
s = "貂蝉"

for i in range(len(s) // 2):
    if s[i] != s[len(s) - 1 - i]:
        print(f"字符 {s[i]} 与 {s[len(s)-1-i]} 不一致,不是对称字符串")
        break
else:
    print(f"'{s}' 是对称字符串!就像貂蝉——正着反着都好看")

输出:

text

'貂蝉' 是对称字符串!就像貂蝉——正着反着都好看

再试一个不对称的:

python

s = "王者荣耀"

for i in range(len(s) // 2):
    if s[i] != s[len(s) - 1 - i]:
        print(f"字符 '{s[i]}' 与 '{s[len(s)-1-i]}' 不一致,不是对称的")
        break
else:
    print("是对称字符串")

输出:

text

字符 '王' 与 '耀' 不一致,不是对称的

🎮 王者知识:对称的短名字有“貂蝉”、“亚瑟”、“露娜”,但“妲己”就不对称(妲≠己)。像“王者荣耀”四个字也不对称——王和耀不一样,者和荣也不一样。

第三部分:字符串的常用操作方法

3.1 查找与统计

方法作用示例
index()返回子串首次出现的位置,找不到报错"hello".index("l") → 2
rindex()从右侧开始找,找不到报错"hello".rindex("l") → 3
find()返回子串首次出现的位置,找不到返回 -1"hello".find("a") → -1
rfind()从右侧开始找,找不到返回 -1"hello".rfind("l") → 3
count()统计子串出现次数,没有返回 0"hello".count("l") → 2

python

msg = "王者荣耀亚瑟"

print(msg.index("荣"))     # 2
print(msg.rindex("亚"))    # 4
print(msg.find("瑟"))      # 5
print(msg.find("妲己"))    # -1(不报错)
print(msg.count("王"))     # 1

3.2 大小写转换(适合英文场景)

方法效果
lower()全部转小写
upper()全部转大写
title()每个单词首字母大写
capitalize()首字母大写,其余小写
swapcase()大小写互换

python

s = "wzry yashe"

print(s.lower())      # wzry yashe
print(s.upper())      # WZRY YASHE
print(s.title())      # Wzry Yashe
print(s.capitalize()) # Wzry yashe
print(s.swapcase())   # WZRY YASHE(小写变大写,大写变小写)

3.3 对齐方式

方法效果
center(宽度)居中
ljust(宽度)左对齐
rjust(宽度)右对齐
zfill(宽度)右对齐,左边补 0

python

s = "亚瑟"

print(s.center(10))     # "    亚瑟    "
print(s.ljust(10))      # "亚瑟        "
print(s.rjust(10))      # "        亚瑟"
print(s.zfill(10))      # "00000000亚瑟"

3.4 判断开头/结尾

方法作用
startswith("xxx")是否以 xxx 开头
endswith("xxx")是否以 xxx 结尾

python

hero = "王者荣耀亚瑟"

print(hero.startswith("王者"))   # True
print(hero.endswith("亚瑟"))     # True
print(hero.startswith("妲己"))   # False

3.5 删除指定字符(默认删除空白)

方法作用
strip()删除两端空白
lstrip()删除左侧空白
rstrip()删除右侧空白

python

s = "  亚瑟  "
print(s.strip())    # "亚瑟"
print(s.lstrip())   # "亚瑟  "
print(s.rstrip())   # "  亚瑟"

3.6 切割与拼接

方法作用
split("分割符")按分割符切分成列表
join(列表)用指定符号把列表拼成字符串

python

# 切割
heroes = "亚瑟,后羿,妲己"
hero_list = heroes.split(",")
print(hero_list)   # ['亚瑟', '后羿', '妲己']

# 拼接:用 " | " 把它们拼起来
new_str = " | ".join(hero_list)
print(new_str)     # "亚瑟 | 后羿 | 妲己"

3.7 替换

方法作用
replace(旧, 新)把旧字符串替换成新字符串

python

s = "我喜欢玩亚瑟"
print(s.replace("亚瑟", "后羿"))   # 我喜欢玩后羿

3.8 编码与解码

方法作用
encode("utf8")字符串 → 字节流
decode("utf8")字节流 → 字符串

python

s = "王者荣耀"

# 编码:字符串 → 字节
byte_data = s.encode("utf8")
print(byte_data)   # b'\xe7\x8e\x8b...'

# 解码:字节 → 字符串
new_s = byte_data.decode("utf8")
print(new_s)       # 王者荣耀

3.9 判断类型(is 系列)

方法作用
isalnum()是否全是字母或数字
isalpha()是否全是字母
isdigit()是否全是数字
isupper()是否全大写
islower()是否全小写
istitle()是否每个单词首字母大写

python

print("亚瑟123".isalnum())   # True
print("亚瑟".isalpha())      # True
print("2026".isdigit())      # True
print("YASE".isupper())      # True

🎯 字符串方法速查表(收藏用)

分类方法
查找index()rindex()find()rfind()count()
大小写lower()upper()title()capitalize()swapcase()
对齐center()ljust()rjust()zfill()
开头结尾startswith()endswith()
去空白strip()lstrip()rstrip()
切割拼接split()join()
替换replace()
编码解码encode()decode()
判断类型isalnum()isalpha()isdigit()isupper()islower()istitle()

🧁 结尾

到今天为止,你已经解锁了字符串的全部技能——

  • 平A(声明与转义):单引号、双引号、三引号,外加 \n \t r"",常规输出稳如老狗

  • 大招(索引与切片):正着数、倒着数、跳着切,精准命中目标字符

  • 连招(操作方法):查找、对齐、切割、拼接、替换,一套打完不空技能

你在Python峡谷里,已经是能单排上分的选手了。

字符串玩明白了,后面很多事情就顺了——读取文件、爬网页、拼SQL、清洗数据,全部是基操。你按的每一个字符,最终都会变成你手里的输出。

路虽远,行则将至;代码虽多,敲则必成。

下一期咱们上 列表和元组——批量处理数据,让你从“单杀”进化到“五杀”。🐍🔥

咱们峡谷见~ 👋

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐