我的图片 · 在线免费的图片处理工具

前言

简单记录一下Python中字符串相关的使用,也是比较基础的,常见的使用方式。

记录于此,方便自己回顾。

正文

创建字符串

s1 = "单引号"                 # 推荐
s2 = '双引号,可以含"引号"'     # 内部有双引号时用
s3 = """三引号
多行"""                       # 保留换行
s4 = str(123)                 # 其它类型转字符串
s5 = '重复' * 3               # 重复 → '重复重复重复'
方式适用场景
""默认首选
''内部含 " 时
"""多行文本、docstring
str(x)数字/对象转字符串
s * n重复拼接

索引 / 切片 / 长度 / 遍历

字符串是字符序列,用法和列表一模一样(下标从 0 开始)。

s = "一二三四五六日"
s[0]     # '一'        正向:从 0 开始
s[2]     # '三'
s[-1]    # '日'        反向:从 -1 开始(倒数第一个)

还存在下面这种写法很常见,一样的

"一二三四五六日"[1]   # '一'
"一二三四五六日"[2]   # '三'

切片 [起:止:步长](止的位置不含):

s[2:5]   # '三四五'    从 2 到 5(不含 5)
s[:3]    # '一二三'    从头到 3
s[4:]    # '五六日'    从 4 到尾
s[::2]   # '一三五日'  每隔 2 个取一个
s[::-1]  # '日六五四三二一'  倒序(经典技巧)

长度和遍历:

len(s)              # 7
[c for c in s]      # ['一','二','三','四','五','六','日']

下标越界会报 IndexError:7 个元素的合法下标是 0~6,取 [7] 直接崩。

拼接与成员判断

"星期" + "三"                  # '星期三'        用 + 拼接
"-".join(["2026","10","28"])    # '2026-10-28'   用分隔符连接列表
"三" in "一二三"                # True           成员判断
"八" not in s                   # True           反向判断
操作写法说明
两串相加a + b少量拼接可用
多串连接"sep".join(list)循环里必用,效率高
是否包含sub in s返回 True/False
是否不含sub not in s同上取反

常用处理方法

核心原则:字符串不可变,所有方法都返回新字符串,原串不动。

以 t = " Hello Python 3.10 " 为例:

方法结果作用
t.strip()'Hello Python 3.10'去掉首尾空白
t.lstrip()'Hello Python 3.10 '只去左边
t.rstrip()' Hello Python 3.10'只去右边
t.lower()' hello python 3.10 '全小写
t.upper()' HELLO PYTHON 3.10 '全大写
t.replace("Python","World")' Hello World 3.10 '替换
t.split()['Hello','Python','3.10']按空白切成列表
"a,b,c".split(",")['a','b','c']按指定分隔符切
"a=b=c".partition("=")('a', '=', 'b=c')切成 3 元组(从左)
"a=b=c".rpartition("=")('a=b', '=', 'c')切成 3 元组(从右)
"行1 行2".splitlines()['行1','行2']按行切
t.find("Py")8找下标,找不到返回 -1
t.index("Py")8找下标,找不到抛异常

find vs index 怎么选:

  • 不确定是否存在 → 用 find(返回 -1 更安全)
  • 确定一定存在 → 用 index(不存在直接报错,方便排查)

判断方法

方法'123''一二三''½''ab1'' ''你好''Hello'
.isdigit()✅❌❌❌❌❌❌
.isdecimal()✅❌❌❌❌❌❌
.isnumeric()✅✅✅❌❌❌❌
.isalpha()❌✅❌❌❌✅✅
.isalnum()✅✅✅✅❌✅✅
.isspace()❌❌❌❌✅❌❌
.istitle()❌❌❌❌❌❌✅
.islower()❌❌❌✅❌❌❌
.isupper()❌❌❌❌❌❌✅
.isidentifier()❌✅❌✅❌✅✅

关键区分:

  • isdigit:只认 0-9 的阿拉伯数字,中文数字不算;
  • isdecimal:比 isdigit 更严,只认十进制数字字符;
  • isnumeric:最宽,中文数字 '一二三'、分数 '½' 都算;
  • isalnum:字母或数字(或中文)就返回 True,含符号就 False;
  • isidentifier:能不能当变量名(123 开头不行,所以 False)。

记住口诀:想判断"是不是数字"用 isdigit;想连中文数字一起认,用 isnumeric。

对齐与填充

"42".zfill(5)            # '00042'      左侧补零到 5 位
"hi".center(10, "*")     # '****hi****' 居中,两边补 *
"hi".ljust(10, "-")      # 'hi--------' 左对齐,右边补 -
"hi".rjust(10, "-")      # '--------hi' 右对齐,左边补 -

表格、报表对齐输出时特别常用,zfill 做编号补零(如 001、002)最方便。

格式化

name, age = "张三", 18

f"{name} 今年 {age} 岁,明年 {age+1} 岁"   # ✅ 首选,最清晰
"{} 今年 {} 岁".format(name, age)          # 位置参数
"{0} 和 {1} 和 {0}".format(name, "李四")   # 索引复用
"{n} 今年 {a} 岁".format(n=name, a=age)   # 命名参数

格式规格(对齐 / 补零 / 精度):

f"|{42:5d}|{3.14159:+.2f}|{7:0>4d}|{'hi':<6}|"
# 输出:|   42|+3.14|0007|hi    |
规格含义
:5d整数占 5 位,右对齐
:+.2f带符号、保留 2 位小数
:0>4d右对齐,左侧补零到 4 位
:<6左对齐,占 6 位
.2%百分比,保留 2 位 → 12.34%
:e科学计数法 → 1.000000e+06

转义与原始字符串

"换\n行\t制表"        # \n 换行、\t 制表符会被解释
r"\d+\.\d+"           # 原始字符串:反斜杠不转义,写正则必备
r"C:\Users\test\new"  # Windows 路径不用双写反斜杠

常用转义符:\n 换行、\t 制表、\\ 反斜杠本身、\' 单引号、\" 双引号。

编码 encode / decode

"中文".encode("utf-8")          # b'\xe4\xb8\xad\xe6\x96\x87',占 6 字节
b'\xe4\xb8\xad\xe6\x96\x87'.decode("utf-8")   # '中文'
"中文".encode("gbk")            # b'\xd6\xd0\xce\xc4',占 4 字节
编码一个中文占字节说明
UTF-83 字节通用标准,默认用它
GBK2 字节老系统 / Windows 中文环境

encode 得到的是 bytes 对象,decode 只能对 bytes 用,且编码要对应,否则抛 UnicodeDecodeError。

不可变性

s = "hello"
print(id(s))         # 140294226006320
s = s + "!"
print(id(s))         # 140294226016752  ← 变了,是新对象

字符串不能原地修改:

s[0] = "H"    # ❌ TypeError: 'str' object does not support item assignment

想"改"只能生成新串:s = "H" + s[1:]。这也是为什么大量拼接要用 join 而不是循环 +=:

# ❌ 循环里 += 会不断创建新对象,慢
# ✅ 先收集到列表,再 join 一次完成
"".join([f"第{i}段" for i in range(6)])   # '第0段第1段第2段第3段第4段第5段'

全局速查表

分类核心操作返回
创建"..." / str(x) / s*nstr
访问s[i] / s[a:b:c] / len(s) / for c in sstr / int
拼接a+b / "sep".join(list)str
查找s.find(sub) / s.index(sub) / sub in sint / bool
清洗strip / replace / split / partitionstr / list
判断isdigit / isnumeric / isalpha / isspace …bool
变形lower / upper / zfill / center / ljuststr
格式化f-string / format / 格式规格str
编码encode / decodebytes / str

参考文章

  1. AI
  2. Python文档

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...