HOWTO · Python

在 Python 中获取字符串的长度和大小

本教程演示了如何在 Python 中获取字符串的长度。

本页内容

使用 len(text) 获取 Python 字符串中元素的数量。需要查看字符串对象本身的浅层内存大小时,则使用 sys.getsizeof(text)。这两种测量回答的是不同问题:字符数不等于字节数,对象的内存大小也不等于文本长度。

使用 len() 获取字符串中的字符数

内置的 len() 函数通常是统计字符串元素数量的高效方法。空格和标点,以及字母和数字,都会计入。对于 Python 字符串,这些元素是 Unicode 码位。因此,由多个码位组成的可见符号(例如,字母后跟组合重音符号,或由多个表情符号连接而成的序列),读者可能会将其看作一个字素,但在 len() 中会计为多个元素。

运行以下示例。示例中的英文字符串保持不变;输出数字表示其中计入的元素数量:

本节中的代码以及显示的标签或输出仍为英文。

text = "Hello, World!"
print(len(text))

输出:

13

如需直接计数,将字符串本身传给 len()。Python 会在函数接收到字符串之前解析字符串字面量中的转义序列:"\n" 表示换行符,而 "\\n" 表示一个字面反斜杠,后面跟着字母 n。len() 统计解析后得到的字符串;它不会解析转义序列。

需要时手动统计字符

当计数属于更大操作的一部分时,手动迭代可能会有帮助。每次迭代字符串都会产生一个码位,因此每次迭代将计数加一,得到的元素数量与 len() 相同,但所需时间与字符串长度成正比。对于一般的长度检查,优先使用 len()。

如果需要先规范化或裁剪文本,请先转换文本,再测量结果。例如,text.strip() 会返回移除了前后空白字符的新字符串;len(text.strip()) 统计的是这个新字符串,不会改变 text 本身。类似地,对于某些 Unicode 文本,转换为小写可能会改变码位数量;如果任务需要的是转换后的值,就应在转换后测量。

测量字符串对象的内存大小

如需估算对象的浅层大小(以字节为单位),从 sys 导入 getsizeof,并将字符串传给它。返回的大小包括字符串对象本身,但不包括它可能引用的其他对象。它既不是字符数,也不是将文本编码为 UTF-8 后得到的字节数。如需测量编码后的数据,请先编码字符串,再测量得到的 bytes 值。

示例中的英文字符串保持不变;输出显示该环境下观测到的大小:

本节中的代码以及显示的标签或输出仍为英文。

import sys

text = "Hello, World!"
size_in_bytes = sys.getsizeof(text)
print(size_in_bytes)

输出:

54

这次观测到的内存大小取决于具体实现和版本;不要将 54 字节视为通用值。统计字符串长度时使用 len();只有在问题确实涉及该对象的浅层大小时,才使用 sys.getsizeof()。