Appearance
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 assignmentpython
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() # Truein 检查子串:
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"..." 是原始字符串,反斜杠不转义。