目标:理解什么是字符串、会创建、索引与切片、常见方法(分割/替换/查找/大小写)、拼接与长度、格式化输出(占位符/format/f-string),并掌握若干“注意事项”。
提示:本笔记中的代码均附中文注释,你可以逐格运行,观察输出结果。
' '或双引号" "包起来的字符序列。 # 例:创建字符串(注意:不要用变量名 str 覆盖内置类型名 str)
s1 = 'Hello, World!' # 单引号
s2 = "Python is great!" # 双引号
s3 = s1 + " " + s2 # 字符串拼接
print(s3) # 预期:Hello, World! Python is great!
0 开始。 s[i] 访问第 i 个字符(越界会报错)。# 演示:索引(index)
text = "Python"
print(text[0]) # 第1个字符:P
print(text[5]) # 第6个字符:n
# 注意事项:索引超界会报错,下面这一行如果取消注释会报 IndexError
# print(text[6])
s[start:end],包含 start,不包含 end。 start 表示从开头;省略 end 表示直到结尾。 s[start:end:step]。# 演示:切片(slice)
text = "Python"
print(text[0:3]) # Pyt(含0,不含3)
print(text[:3]) # Pyt(从头到索引3之前)
print(text[3:]) # hon(从索引3直到末尾)
print(text[1:4]) # yth
print(text[2:6]) # thon(注意:不是'P',而是从索引2到5的"thon")
+ 连接多个字符串;或用 join() 更高效地连接列表。# 演示:拼接
first = 'Hello'
second = 'World'
print(first + ' ' + second) # Hello World
words = ["人文社科", "Python", "字符串"]
print(" / ".join(words)) # 使用 join 连接列表中的字符串
len(s) 获取字符个数(注意:是字符数,不是“字节数”)。s = 'Python'
print(len(s)) # 6
cn = "汉字ABC"
print(len(cn)) # 5('汉' '字' 'A' 'B' 'C')
s.split(sep) 按分隔符切分为列表;不传 sep 时按任意空白切分。 s = 'Hello,World,Python'
print(s.split(',')) # ['Hello', 'World', 'Python']
line = "文学 社会学 历史" # 中间有空格和制表符
print(line.split()) # 默认按空白分割 -> ['文学', '社会学', '历史']
s.replace(old, new, count=None):将 old 替换为 new;count 可限制次数。 s = 'Hello, Python'
print(s.replace('Python', 'World')) # Hello, World
print(s) # 原 s 不变
print(s.replace('l', 'L', 2)) # 限制替换2次:HeLLo, Python
s.find(sub):返回子串的起始索引;找不到返回 -1。 s.index(sub):找不到会抛出异常。根据需要二选一。s = 'Hello, Python'
print(s.find('Python')) # 7
print(s.find('Go')) # -1
# 使用 index,如果不存在会报错(请根据需要选择 find 或 index)
# print(s.index('Go')) # ValueError: substring not found
s.lower()、s.upper()、s.title()(标题化)、s.capitalize()(句首大写)。s = 'Hello, Python'
print(s.lower()) # hello, python
print(s.upper()) # HELLO, PYTHON
print(s.title()) # Hello, Python
print(s.capitalize()) # Hello, python
str.format 概览)¶format 将占位符 {} 替换为变量值。 name = 'Chomsky'
title = 'Professor'
print('Name: {}, Title: {}'.format(name, title))
# 关键字参数 + 格式说明
score = 92.3456
print("姓名:{n}|头衔:{t}|成绩:{s:.1f}".format(n=name, t=title, s=score)) # 保留1位小数
(1)反转:s[::-1]
(2)判断:isalnum()、isalpha()、isdigit() 等返回布尔值
(3)计数:count(sub) 统计子串出现次数
(4)对齐:ljust()、rjust()、center()
# (1)反转
s = 'Python'
print(s[::-1]) # nohtyP
# (2)判断
s = 'Python123'
print(s.isalnum()) # True(字母或数字)
print(s.isalpha()) # False(因为含数字)
print("2025".isdigit()) # True
# (3)计数
s = 'Python, Python, Python'
print(s.count('Python')) # 3
# (4)对齐
s = 'Python'
print(s.ljust(10, '-')) # Python----
print(s.rjust(10, '-')) # ----Python
print(s.center(11, '-')) # ---Python--
%¶%s(字符串)、%d(整数)、%f(浮点)。 format 或 f-string,但阅读旧代码时仍会看到 %。name = 'Chomsky'
age = 96
print('Name: %s, Age: %d' % (name, age))
print('Pi ≈ %.2f' % 3.14159) # 保留两位小数
.format()¶str.format() 自 Python 2.6 起提供,更灵活,支持对齐、宽度、精度等。name = 'Chomsky'
print('Name: {}'.format(name))
print('编号:{:04d}'.format(7)) # 宽度4,不足补0 -> 0007
print('百分比:{:.1%}'.format(0.256)) # 25.6%
f'Name: {name}'。 name = 'Chomsky'
score = 92.3456
print(f'Name: {name}')
print(f'下学期预计成绩:{score:.1f}')
print(f'长度比较:{"人文"+"社科"} 的长度是 {len("人文社科")}')
str 覆盖内置类型 str,避免后续无法调用 str() 转换。s[a:b] 取 [a, b) 左闭右开。replace() 不会修改原变量,而是返回新字符串。len() 计算的是字符数,不是“字节数”。练习:把你的一段课程简介或研究摘要粘贴为字符串,进行:
(1)去除多余空白;(2)统计某个关键词出现次数;(3)把年份统一替换为“[YEAR]”。