字符串 #
字符串是Python中最常用的数据类型之一,用于表示文本数据。
一、字符串创建 #
1.1 基本创建 #
python
# 单引号
s1 = 'Hello'
# 双引号
s2 = "World"
# 三引号(多行字符串)
s3 = '''这是
多行
字符串'''
s4 = """这也是
多行字符串"""
# 单引号和双引号在Python中功能相同
print('He said "Hello"') # 引号嵌套
print("It's a test") # 包含单引号
1.2 转义字符 #
python
# 常用转义字符
print('Hello\nWorld') # 换行
print('Hello\tWorld') # 制表符
print('Hello\\World') # 反斜杠
print('Hello\'World') # 单引号
print('Hello\"World') # 双引号
# 原始字符串(不转义)
print(r'C:\Users\name\test') # 原样输出,不转义
| 转义字符 | 描述 |
|---|---|
\n |
换行 |
\t |
制表符 |
\\ |
反斜杠 |
\' |
单引号 |
\" |
双引号 |
\r |
回车 |
\b |
退格 |
\f |
换页 |
\ooo |
八进制值 |
\xhh |
十六进制值 |
1.3 字符串长度 #
python
s = "Hello"
print(len(s)) # 5
# 中文长度
s = "你好世界"
print(len(s)) # 4(Python 3中每个汉字长度为1)
# 字节数
print(len("你好".encode('utf-8'))) # 6(UTF-8编码,每个汉字3字节)
二、字符串索引与切片 #
2.1 索引访问 #
python
s = "Python"
# 正向索引(从0开始)
print(s[0]) # 'P'
print(s[1]) # 'y'
print(s[5]) # 'n'
# 反向索引(从-1开始)
print(s[-1]) # 'n'(最后一个字符)
print(s[-2]) # 'o'
print(s[-6]) # 'P'(第一个字符)
2.2 切片操作 #
python
s = "Python"
# 基本切片 [start:end:step]
print(s[0:3]) # 'Pyt'(索引0到2,不含3)
print(s[:3]) # 'Pyt'(从开头到2)
print(s[3:]) # 'hon'(从索引3到末尾)
print(s[:]) # 'Python'(复制整个字符串)
# 步长
print(s[::2]) # 'Pto'(每隔一个字符)
print(s[1::2]) # 'yhn'(从索引1开始,每隔一个)
print(s[::-1]) # 'nohtyP'(反转字符串)
# 负索引切片
print(s[-3:]) # 'hon'(最后三个字符)
print(s[:-3]) # 'Pyt'(除最后三个外的字符)
2.3 切片规则 #
python
# 切片不会报错,超出范围会自动调整
s = "Hello"
print(s[0:100]) # 'Hello'(不会报错)
print(s[10:20]) # ''(空字符串)
# 索引访问会报错
# print(s[10]) # IndexError: string index out of range
三、字符串格式化 #
3.1 f-string(推荐,Python 3.6+) #
python
name = "Tom"
age = 25
# 基本用法
print(f"我叫{name},今年{age}岁")
# 表达式
print(f"明年{age + 1}岁")
print(f"名字长度:{len(name)}")
# 格式化数字
pi = 3.14159
print(f"π约等于{pi:.2f}") # 保留2位小数
print(f"π约等于{pi:.4f}") # 保留4位小数
print(f"数字:{1000:,}") # 千位分隔符:1,000
print(f"百分比:{0.756:.2%}") # 百分比:75.60%
# 宽度和对齐
print(f"|{name:>10}|") # 右对齐,宽度10
print(f"|{name:<10}|") # 左对齐,宽度10
print(f"|{name:^10}|") # 居中,宽度10
# 填充字符
print(f"|{name:*^10}|") # 居中填充:***Tom*****
# 科学计数法
print(f"{1000000:.2e}") # 1.00e+06
# 进制转换
num = 255
print(f"二进制:{num:b}") # 11111111
print(f"八进制:{num:o}") # 377
print(f"十六进制:{num:x}") # ff
print(f"十六进制:{num:X}") # FF
3.2 format方法 #
python
# 位置参数
print("我叫{},今年{}岁".format("Tom", 25))
# 带索引
print("我叫{0},今年{1}岁,{0}是我的名字".format("Tom", 25))
# 关键字参数
print("我叫{name},今年{age}岁".format(name="Tom", age=25))
# 格式化
print("{:.2f}".format(3.14159)) # 3.14
print("{:>10}".format("Hello")) # 右对齐
print("{:0>5}".format(42)) # 00042(前面补零)
3.3 %格式化(旧式) #
python
name = "Tom"
age = 25
print("我叫%s,今年%d岁" % (name, age))
print("π约等于%.2f" % 3.14159)
print("%10s" % "Hello") # 宽度10,右对齐
| 格式符 | 描述 |
|---|---|
%s |
字符串 |
%d |
整数 |
%f |
浮点数 |
%.2f |
保留2位小数 |
%x |
十六进制 |
%o |
八进制 |
%e |
科学计数法 |
四、字符串方法 #
4.1 查找方法 #
python
s = "Hello World"
# 查找子串位置
print(s.find("World")) # 6
print(s.find("Python")) # -1(未找到)
print(s.find("o")) # 4(第一个o的位置)
print(s.rfind("o")) # 7(最后一个o的位置)
# index与find类似,但找不到会报错
print(s.index("World")) # 6
# print(s.index("Python")) # ValueError
# 统计出现次数
print(s.count("o")) # 2
print(s.count("l")) # 3
4.2 判断方法 #
python
# 判断开头和结尾
s = "Hello World"
print(s.startswith("Hello")) # True
print(s.startswith("World")) # False
print(s.endswith("World")) # True
print(s.endswith("Hello")) # False
# 判断字符类型
print("123".isdigit()) # True(只含数字)
print("abc".isalpha()) # True(只含字母)
print("abc123".isalnum()) # True(只含字母和数字)
print(" ".isspace()) # True(只含空白字符)
print("Hello".islower()) # False(是否全小写)
print("HELLO".isupper()) # True(是否全大写)
print("Hello World".istitle()) # True(是否标题格式)
# 判断是否可打印
print("Hello".isprintable()) # True
print("Hello\n".isprintable()) # False
4.3 大小写转换 #
python
s = "Hello World"
print(s.upper()) # "HELLO WORLD"(全大写)
print(s.lower()) # "hello world"(全小写)
print(s.capitalize()) # "Hello world"(首字母大写)
print(s.title()) # "Hello World"(每个单词首字母大写)
print(s.swapcase()) # "hELLO wORLD"(大小写互换)
4.4 去除空白 #
python
s = " Hello World "
print(s.strip()) # "Hello World"(去除两端空白)
print(s.lstrip()) # "Hello World "(去除左边空白)
print(s.rstrip()) # " Hello World"(去除右边空白)
# 指定去除字符
s = "xxHello Worldxx"
print(s.strip('x')) # "Hello World"
4.5 分割与连接 #
python
# 分割
s = "苹果,香蕉,橙子"
fruits = s.split(",") # ['苹果', '香蕉', '橙子']
print(fruits)
s = "第一行\n第二行\n第三行"
lines = s.splitlines() # ['第一行', '第二行', '第三行']
print(lines)
# 分割成三部分
s = "user@example.com"
parts = s.partition("@") # ('user', '@', 'example.com')
print(parts)
# 连接
fruits = ['苹果', '香蕉', '橙子']
print("-".join(fruits)) # "苹果-香蕉-橙子"
print("".join(fruits)) # "苹果香蕉橙子"
print(", ".join(fruits)) # "苹果, 香蕉, 橙子"
4.6 替换方法 #
python
s = "Hello World"
# 替换
print(s.replace("World", "Python")) # "Hello Python"
print(s.replace("o", "0")) # "Hell0 W0rld"
print(s.replace("o", "0", 1)) # "Hell0 World"(只替换1个)
# 翻译替换
table = str.maketrans("aeiou", "12345")
print("hello world".translate(table)) # "h2ll4 w4rld"
4.7 对齐方法 #
python
s = "Hello"
print(s.center(10)) # " Hello "(居中)
print(s.center(10, '*')) # "**Hello***"
print(s.ljust(10)) # "Hello "(左对齐)
print(s.ljust(10, '-')) # "Hello-----"
print(s.rjust(10)) # " Hello"(右对齐)
print(s.rjust(10, '-')) # "-----Hello"
print(s.zfill(10)) # "00000Hello"(左侧补零)
4.8 编码与解码 #
python
s = "你好世界"
# 编码
bytes_utf8 = s.encode('utf-8') # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
bytes_gbk = s.encode('gbk') # b'\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7'
# 解码
print(bytes_utf8.decode('utf-8')) # "你好世界"
print(bytes_gbk.decode('gbk')) # "你好世界"
五、字符串运算 #
5.1 拼接 #
python
# 使用 +
s1 = "Hello"
s2 = "World"
print(s1 + " " + s2) # "Hello World"
# 使用 * 重复
print("=" * 10) # "=========="
print("Ha" * 3) # "HaHaHa"
# 隐式拼接
s = "Hello" "World"
print(s) # "HelloWorld"
# 多行拼接
s = ("这是一个很长的字符串"
"需要分成多行"
"来书写")
print(s)
5.2 比较运算 #
python
# 相等比较
print("Hello" == "Hello") # True
print("Hello" == "hello") # False
# 大小比较(字典序)
print("abc" < "abd") # True
print("abc" < "abcd") # True(较短的字符串较小)
print("Z" < "a") # True(大写字母在小写字母前)
# 包含判断
print("ell" in "Hello") # True
print("xyz" in "Hello") # False
print("xyz" not in "Hello") # True
六、字符串遍历 #
6.1 基本遍历 #
python
s = "Python"
# 遍历字符
for char in s:
print(char)
# 带索引遍历
for i, char in enumerate(s):
print(f"{i}: {char}")
# 使用索引
for i in range(len(s)):
print(s[i])
6.2 字符列表转换 #
python
s = "Hello"
# 字符串转列表
chars = list(s)
print(chars) # ['H', 'e', 'l', 'l', 'o']
# 列表转字符串
chars = ['H', 'e', 'l', 'l', 'o']
s = "".join(chars)
print(s) # "Hello"
七、字符串是不可变的 #
python
s = "Hello"
# 字符串不能修改
# s[0] = 'h' # TypeError: 'str' object does not support item assignment
# 需要创建新字符串
s = 'h' + s[1:] # "hello"
print(s)
# 或转换为列表修改
chars = list(s)
chars[0] = 'h'
s = "".join(chars)
print(s)
八、常用技巧 #
8.1 反转字符串 #
python
s = "Hello"
# 方法1:切片
print(s[::-1]) # "olleH"
# 方法2:reversed
print("".join(reversed(s))) # "olleH"
8.2 判断回文 #
python
def is_palindrome(s):
return s == s[::-1]
print(is_palindrome("aba")) # True
print(is_palindrome("hello")) # False
8.3 统计字符频率 #
python
from collections import Counter
s = "hello world"
freq = Counter(s)
print(freq) # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
8.4 去除重复字符 #
python
s = "aabbcc"
# 保持顺序
result = "".join(dict.fromkeys(s))
print(result) # "abc"
# 不保持顺序
result = "".join(set(s))
print(result) # "abc"(顺序可能不同)
九、总结 #
| 操作 | 方法/语法 | 示例 |
|---|---|---|
| 创建 | '', "", ''' |
'Hello' |
| 索引 | s[i] |
'Hello'[0] → 'H' |
| 切片 | s[start:end:step] |
'Hello'[1:4] → 'ell' |
| 长度 | len(s) |
len('Hello') → 5 |
| 查找 | find(), index() |
'Hello'.find('l') → 2 |
| 分割 | split() |
'a,b,c'.split(',') |
| 连接 | join() |
'-'.join(['a','b']) |
| 替换 | replace() |
'Hello'.replace('l','L') |
| 格式化 | f-string |
f'{name}' |
最后更新:2026-03-16