字符串 #

字符串是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