# 常用数据结构之字符串 ## 字符串基础 字符串是由零个或多个字符组成的有序序列,用单引号或双引号创建: ```python s1 = 'hello, world!' s2 = "你好,世界!" s3 = '''hello, wonderful world!''' # 三引号,支持多行 ``` > **注意**:字符串是**不可变类型**,不能通过索引修改字符。 ## 转义字符 | 转义符 | 含义 | |--------|------| | `\\` | 反斜杠 | | `\'` | 单引号 | | `\"` | 双引号 | | `\n` | 换行 | | `\t` | 制表符 | | `\r` | 回车 | | `\x61` | 十六进制表示字符 | | `\u9a86` | Unicode字符 | **原始字符串**(不转义): ```python s = r'hello\nworld' # \n 不是换行,就是字符\和n ``` ## 字符串运算 ```python # 拼接和重复 print('a' + 'b') # ab print('-' * 10) # ---------- # 比较(按Unicode编码比较) print('A' < 'a') # True(65 < 97) # 成员运算 print('wo' in 'hello world') # True # 索引和切片 s = 'abc123456' print(s[0]) # a print(s[-1]) # 6 print(s[2:5]) # c12 print(s[::-1]) # 654321cba(反转) ``` ## 字符串方法 ### 大小写转换 ```python s = 'hello, world!' print(s.capitalize()) # Hello, world!(首字母大写) print(s.title()) # Hello, World!(每个单词首字母大写) print(s.upper()) # HELLO, WORLD! print('GOOD'.lower()) # good ``` ### 查找 ```python s = 'hello, world!' print(s.find('or')) # 8(找不到返回-1) print(s.rfind('o')) # 8(从右向左找) print(s.index('or')) # 8(找不到抛异常) ``` ### 性质判断 ```python s = 'abc123' print(s.isdigit()) # False(是否全为数字) print(s.isalpha()) # False(是否全为字母) print(s.isalnum()) # True(是否由字母或数字组成) print('hello'.startswith('he')) # True print('hello.py'.endswith('.py')) # True ``` ### 格式化 **f-string(推荐,Python 3.6+):** ```python name = 'Alice' age = 30 print(f'{name} is {age} years old') print(f'{3.14159:.2f}') # 3.14(保留两位小数) print(f'{100:0>5d}') # 00100(补零) print(f'{0.75:.1%}') # 75.0%(百分比) print(f'{123456:,}') # 123,456(千分位) ``` ### 修剪 ```python s = ' hello ' print(s.strip()) # hello(去除两端空格) print(s.lstrip()) # 'hello ' print(s.rstrip()) # ' hello' ``` ### 替换和拆分 ```python s = 'hello, good world' print(s.replace('o', '@')) # hell@, g@@d w@rld print(s.replace('o', '@', 1)) # hell@, good world(替换1次) s2 = 'I love you' print(s2.split()) # ['I', 'love', 'you'] print('-'.join(['I', 'love', 'you'])) # I-love-you ``` ### 编码和解码 ```python s = '骆昊' b = s.encode('utf-8') # b'\xe9\xaa\x86\xe6\x98\x8a' print(b.decode('utf-8')) # 骆昊 ``` > **注意**:编码和解码方式必须一致,否则会乱码或报错。 ## 总结 - 字符串是不可变的有序序列,支持索引、切片、拼接操作 - 常用方法:大小写、查找、判断、格式化、修剪、替换、拆分 - 格式化推荐用 f-string:`f'{变量:.2f}'` - 字符串与字节串可通过 `encode()`/`decode()` 相互转换