Menu

Python 字符串:f-string、切片和常用字符串方法

在 Python 中处理文本:创建字符串、使用 f-string、切片,以及 split、join、replace、strip 等日常方法。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

文本,外加一堆方法

Python 字符串是由字符组成的序列,你用到它的次数会比其他任何类型都多。名字、标签、消息、URL、文件路径、API 响应,迟早都会以字符串的形式出现。

用引号创建字符串,单引号、双引号或三引号都可以:

单引号和双引号可以互换。哪种能让你少转义一个字符,就用哪种。"don't" 很干净;'don\'t' 就得加反斜杠。

字符串是不可变的。字符串一旦创建,就无法原地修改其中的字符。每个看起来在修改字符串的操作,其实都返回了一个新字符串。所以你要写 text = text.upper(),而不是只写 text.upper():不重新赋值的话,新生成的大写字符串就被丢掉了。

拼接与重复

大部分字符串组合工作,靠两个运算符就够了:

+ 拼接字符串,* 重复字符串。两者都返回新字符串。

用 + 拼接很多片段,代码很快就会变得难看。要把不同类型的值混进一条消息里,改用 f-string,详见下一节。

f-string:最常用的格式化方式

在开头的引号前加一个 f,字符串就变成了模板。{...} 中的内容会被替换成该表达式的值:

花括号里可以放任何表达式:变量、算术运算、方法调用、函数调用。不过要保持简单;如果你想把三行计算塞进 {...},先把结果算到一个有名字的变量里。

f-string 还支持在冒号后写格式说明符,用来控制数字格式、填充和对齐:

这些格式说明符和 str.format() 用的是同一套,等你熟悉了基础,值得快速浏览一遍。刚开始写代码时用不到它们。

切片:取出一部分

字符串和其他序列一样可以索引。每个字符都有一个从零开始的位置,你可以取出单个字符,也可以取出一段范围:

[start:stop:step] 这种写法在列表和其他序列中也会出现,所以花几分钟把它吃透,到处都用得上。

有两点值得特别注意:

  • stop 索引不包含在内:word[0:2] 包含索引 0 和 1,不包含 2。
  • 负索引从末尾开始数:-1 是最后一个字符,-2 是倒数第二个,依此类推。

如何反转字符串

字符串没有 .reverse() 方法,因为它是不可变的。但用步长为 -1 的切片,一行就能搞定:

word[::-1] 的意思是“从头到尾,每次倒退 1 步”。结果是一个全新的字符串,原字符串保持不变。如果你只想倒序遍历字符,而不想真的生成一个新字符串,reversed(word) 会返回一个惰性迭代器。

如何求字符串的长度

len(text) 返回字符数:

注意,len 统计的是 Unicode 码点,而不是字节。len("café") 是 4 而不是 5,尽管它的 UTF-8 编码占用更多字节。这通常正是你想要的结果。

如何判断字符串是否包含子串

in 运算符是最地道的写法,读起来就像英语句子:

要忽略大小写,先把两边统一处理:

如果你需要的是位置,而不只是“有没有”,就用 .find():它返回索引,找不到子串时返回 -1。

常用字符串方法

字符串有几十个方法。下面这几个你会经常用到:

分割与连接:

.split(separator) 把字符串变成列表,separator.join(list_of_strings) 再把它粘回去。实际工作中的字符串处理,有很大一部分都靠这两个方法完成。

还有一组好用的搭配:

这就是一个单行配置项的解析器,只用了三行代码。字符串虽小,用处很大。

检查字符串的内容

有几个方法返回布尔值,适合放在 if 条件里:

这些方法要慎用:它们对 Unicode 的一些特殊情况,处理方式不一定符合你的预期。只要超出 ASCII 范围,就改用正则表达式模块或 unicodedata 模块。

转义特殊字符

有些字符需要加反斜杠才能出现在字符串里:

写 Windows 路径或正则表达式时,原始字符串会让事情简单很多。在引号前加一个 r,反斜杠就不再是转义字符:

字符串无处不在,所以要保持可读

三个习惯,能让大量处理字符串的代码不至于乱成一团:

  1. 用 f-string 做插值。 不要用 + 把多种类型串在一起。
  2. “修改”时要重新赋值。 写 text = text.strip(),而不是单独一句 text.strip()。
  3. 优先用 .split() 和 .join(),而不是手写循环来解析或拼装文本。它们更快、更清晰,也更不容易出错。

下一篇:深入 f-string。这个格式化工具你已经见过好几次了,下一篇还会讲到数字和日期的格式说明符,正是它们让 f-string 值得精通。

常见问题

Python 中的 f-string 是什么?

f-string 是以 f 开头的字符串字面量,{...} 里的内容会被替换成该表达式的值。例如:f"Hello, {name}!" 会在运行时把 name 当前的值填进字符串。

Python 中如何反转字符串?

用步长为 -1 的切片:reversed_text = original[::-1]。它返回一个新字符串,字符相同但顺序相反。原字符串保持不变,因为 Python 的字符串是不可变的。

Python 中如何分割字符串?

对字符串调用 .split()。不传参数时,它按任意空白字符分割:"a b c".split() 返回 ['a', 'b', 'c']。你也可以指定分隔符:"a,b,c".split(",") 返回 ['a', 'b', 'c']。

Python 字符串是可变的吗?

不是。字符串是不可变的:字符串一旦创建,就无法原地修改其中任何一个字符。所有看起来“修改”了字符串的方法,其实都返回一个新字符串。所以你会看到 text = text.strip() 这样的写法:把变量重新赋值为新字符串。

Python 中如何拼接字符串?

用 + 连接两个字符串:"hello" + " " + "world"。要把某个值嵌进一句话里,优先用 f-string:f"Hello, {name}"。要把列表中的很多片段连起来,用 separator.join(pieces):它比连续使用 + 更快,也更好读。

Python 中如何求字符串的长度?

调用内置函数 len(text)。它返回字符数(Unicode 码点数),所以 len("café") 是 4。要得到字节长度,先编码:len(text.encode("utf-8"))。

Coddy 编程语言插图

和 Coddy 一起学编程

开始