Skip to content

05|字符串基础

字符串是 Python 中最常用的数据类型之一。日志内容、文件路径、配置值、API 响应——这些在程序里都是字符串。掌握字符串的创建、访问和切片,是处理文本数据的第一步。

一、创建字符串

Python 字符串可以用单引号或双引号包围:

python
s1 = 'hello'
s2 = "hello"

单双引号完全等价。如果一个字符串内部包含单引号,用双引号包围更方便:

python
message = "It's a nice day"   # 内部有单引号,外层用双引号
quote = 'He said "hello"'     # 内部有双引号,外层用单引号

也可以用转义字符:

python
message = 'It\'s a nice day'   # \' 表示单引号字符本身
path = "C:\\Users\\Alice"      # \\ 表示反斜杠字符本身

多行字符串用三引号:

python
text = """第一行
第二行
第三行"""

三引号会保留字符串中的换行符。如果不需要换行,但代码需要折行,用反斜杠:

python
long_string = "这是一个很长的字符串," \
              "可以拆成多行写"

二、字符串不可变

字符串创建后不能被修改。任何"修改"操作都会返回一个新字符串:

python
s = "hello"
s[0] = "H"   # TypeError: 'str' object does not support item assignment
python
s = "hello"
s = s.replace("h", "H")   # 正确:replace 返回新字符串

这个特性意味着字符串可以作为字典的键(因为键需要是不可变的),也可以在多线程环境下安全共享。

三、索引与切片

字符串是一个字符序列,可以用索引访问单个字符:

python
s = "Python"

s[0]     # 'P',第一个字符
s[1]     # 'y',第二个字符
s[-1]    # 'n',最后一个字符
s[-2]    # 'o',倒数第二个字符

索引从 0 开始,-1 表示最后一个元素。访问超出范围的索引会抛出 IndexError

切片提取子串:

python
s = "Python"

s[0:2]    # 'Py',从索引 0 开始,到索引 2 之前(不含 2)
s[2:5]    # 'tho'
s[:3]     # 'Pyt',从头开始到索引 3 之前
s[3:]     # 'hon',从索引 3 开始到末尾
s[:]      # 'Python',复制整个字符串
s[-3:]    # 'hon',最后三个字符
s[::2]    # 'Pto',每隔一个字符取一个
s[::-1]   # 'nohtyP',反转字符串

切片格式是 [start:end:step]。省略 start 表示从头开始,省略 end 表示到末尾,省略 step 表示步长为 1。切片不会越界——end 超过字符串长度时,自动停在末尾。

四、len() 与遍历

python
s = "hello"
len(s)    # 5,字符串长度

遍历每个字符:

python
for char in "hello":
    print(char)

带索引遍历:

python
for i, char in enumerate("hello"):
    print(i, char)
# 0 h
# 1 e
# 2 l
# 3 l
# 4 o

五、字符串比较

字符串按字典序比较,逐个字符比较 Unicode 码点:

python
"apple" < "banana"    # True
"ABC" == "abc"         # False,大小写不同
"10" < "2"             # True,按字符比较,'1' 的码点小于 '2'

大小写不敏感比较:

python
"ABC".lower() == "abc".lower()   # True

in 检查子串:

python
"Py" in "Python"      # True
"xyz" in "Python"     # False

六、原始字符串

字符串前的 r 表示原始字符串,反斜杠不再作为转义字符:

python
path = r"C:\Users\Alice"   # 反斜杠就是反斜杠,不需要写 \\
regex = r"\d+\.\d+"        # 正则表达式里反斜杠很常见

原始字符串在写正则表达式、Windows 路径时很有用。但它不能以单个反斜杠结尾——r"C:\" 会语法错误,因为 " 被解析为引号转义。

记忆锚点:字符串不可变,"修改"返回新字符串;索引从 0 开始,-1 是最后一个;切片 [start:end] 左闭右开,[:] 复制,[::-1] 反转;r"..." 是原始字符串,反斜杠不转义。