本文总结了Python中字符串、列表、元组和字典的常用方法。
字符串方法包括大小写转换、分割替换等;
列表支持增删改查等可变操作;
元组仅有count和index方法,不可修改;
字典提供键值对操作如get、update等;
文章还对比了各类型的特性:字符串不可变但功能丰富,列表灵活可变,元组不可变适合固定数据,字典查询最快适合映射关系。
最后给出了各类型的实用示例代码,帮助理解基础操作方法。
Python 字符串、列表、元组、字典的方法/API 总结表
1. 字符串方法 (String Methods)
| 方法 | 描述 | 示例 | 返回值 |
|---|---|---|---|
str.upper() | 转换为大写 | "hello".upper() | "HELLO" |
str.lower() | 转换为小写 | "HELLO".lower() | "hello" |
str.capitalize() | 首字母大写 | "hello".capitalize() | "Hello" |
str.title() | 每个单词首字母大写 | "hello world".title() | "Hello World" |
str.swapcase() | 大小写互换 | "Hello".swapcase() | "hELLO" |
str.strip() | 移除首尾空白/字符 | " hi ".strip() | "hi" |
str.lstrip() | 移除左侧空白/字符 | " hi".lstrip() | "hi" |
str.rstrip() | 移除右侧空白/字符 | "hi ".rstrip() | "hi" |
str.replace(old, new) | 替换子串 | "hello".replace("l","x") | "hexxo" |
str.split(sep) | 分割为列表 | "a,b,c".split(",") | ['a','b','c'] |
str.join(iterable) | 连接序列为字符串 | ",".join(['a','b']) | "a,b" |
str.find(sub) | 查找子串索引(找不到返回-1) | "hello".find("l") | 2 |
str.index(sub) | 查找子串索引(找不到报错) | "hello".index("l") | 2 |
str.count(sub) | 统计子串出现次数 | "hello".count("l") | 2 |
str.startswith(prefix) | 检查是否以...开头 | "hello".startswith("he") | True |
str.endswith(suffix) | 检查是否以...结尾 | "hello".endswith("lo") | True |
str.isalpha() | 是否全是字母 | "abc".isalpha() | True |
str.isdigit() | 是否全是数字 | "123".isdigit() | True |
str.isalnum() | 是否全是字母或数字 | "abc123".isalnum() | True |
str.isspace() | 是否全是空白字符 | " ".isspace() | True |
str.center(width) | 居中对齐 | "hi".center(5) | " hi " |
str.ljust(width) | 左对齐 | "hi".ljust(5) | "hi " |
str.rjust(width) | 右对齐 | "hi".rjust(5) | " hi" |
str.zfill(width) | 用0填充 | "42".zfill(5) | "00042" |
str.format() | 格式化字符串 | "{} {}".format(1,2) | "1 2" |
str.encode(encoding) | 编码为字节 | "hi".encode() | b'hi' |
2. 列表方法 (List Methods)
| 方法 | 描述 | 示例 | 返回值 | 是否原地修改 |
|---|---|---|---|---|
list.append(x) | 在末尾添加元素 | [1,2].append(3) | None | ✅ 是 |
list.extend(iterable) | 扩展列表 | [1,2].extend([3,4]) | None | ✅ 是 |
list.insert(i, x) | 在指定位置插入 | [1,3].insert(1,2) | None | ✅ 是 |
list.remove(x) | 删除第一个匹配项 | [1,2,1].remove(1) | None | ✅ 是 |
list.pop(i) | 删除并返回元素 | [1,2,3].pop(1) | 2 | ✅ 是 |
list.clear() | 清空列表 | [1,2,3].clear() | None | ✅ 是 |
list.index(x) | 返回第一个匹配索引 | [1,2,3].index(2) | 1 | ❌ 否 |
list.count(x) | 统计元素出现次数 | [1,2,1].count(1) | 2 | ❌ 否 |
list.sort() | 排序 | [3,1,2].sort() | None | ✅ 是 |
list.reverse() | 反转 | [1,2,3].reverse() | None | ✅ 是 |
list.copy() | 浅拷贝 | [1,2,3].copy() | 新列表 | ❌ 否 |
3. 元组方法 (Tuple Methods)
| 方法 | 描述 | 示例 | 返回值 | 说明 |
|---|---|---|---|---|
tuple.count(x) | 统计元素出现次数 | (1,2,1).count(1) | 2 | 元组唯一可用的方法 |
tuple.index(x) | 返回第一个匹配索引 | (1,2,3).index(2) | 1 | 找不到报错 |
注意:元组是不可变的,所以没有append()、remove()、sort()等修改方法。
4. 字典方法 (Dictionary Methods)
| 方法 | 描述 | 示例 | 返回值 | 是否原地修改 |
|---|---|---|---|---|
dict.keys() | 返回所有键的视图 | {'a':1}.keys() | dict_keys(['a']) | ❌ 否 |
dict.values() | 返回所有值的视图 | {'a':1}.values() | dict_values([1]) | ❌ 否 |
dict.items() | 返回所有键值对视图 | {'a':1}.items() | dict_items([('a',1)]) | ❌ 否 |
dict.get(key, default) | 安全获取值 | {'a':1}.get('b',0) | 0 | ❌ 否 |
dict.setdefault(key, default) | 获取值,不存在则设置 | d.setdefault('b',2) | 2 | ✅ 是 |
dict.update(other) | 更新/合并字典 | d.update({'b':2}) | None | ✅ 是 |
dict.pop(key, default) | 删除并返回值 | d.pop('a', None) | 1 | ✅ 是 |
dict.popitem() | 删除并返回最后插入的键值对 | d.popitem() | ('b',2) | ✅ 是 |
dict.clear() | 清空字典 | d.clear() | None | ✅ 是 |
dict.copy() | 浅拷贝 | d.copy() | 新字典 | ❌ 否 |
dict.fromkeys(seq, value) | 创建字典(类方法) | dict.fromkeys(['a','b'],0) | {'a':0,'b':0} | ❌ 否 |
5. 通用内置函数 (适用于多种类型)
| 函数 | 描述 | 字符串 | 列表 | 元组 | 字典 |
|---|---|---|---|---|---|
len(obj) | 返回长度 | ✅ | ✅ | ✅ | ✅ (键的数量) |
max(obj) | 返回最大值 | ✅ | ✅ | ✅ | ✅ (键的最大值) |
min(obj) | 返回最小值 | ✅ | ✅ | ✅ | ✅ (键的最小值) |
sum(obj) | 求和 | ❌ | ✅ | ✅ | ❌ |
sorted(obj) | 返回排序后的列表 | ✅ | ✅ | ✅ | ✅ (返回键的排序列表) |
reversed(obj) | 返回反向迭代器 | ✅ | ✅ | ✅ | ❌ |
enumerate(obj) | 返回索引-元素对 | ✅ | ✅ | ✅ | ❌ |
zip(*iterables) | 并行迭代 | ✅ | ✅ | ✅ | ✅ (对键值对) |
any(obj) | 是否有元素为真 | ✅ | ✅ | ✅ | ✅ (值) |
all(obj) | 是否所有元素为真 | ✅ | ✅ | ✅ | ✅ (值) |
6. 类型特有操作符
| 操作符 | 描述 | 字符串 | 列表 | 元组 | 字典 |
|---|---|---|---|---|---|
+ | 连接 | ✅ | ✅ | ✅ | ❌ |
* | 重复 | ✅ | ✅ | ✅ | ❌ |
in | 成员检查 | ✅ (子串) | ✅ (元素) | ✅ (元素) | ✅ (键) |
not in | 非成员检查 | ✅ | ✅ | ✅ | ✅ |
[] | 索引/键访问 | ✅ | ✅ | ✅ | ✅ |
[:] | 切片 | ✅ | ✅ | ✅ | ❌ |
= | 赋值 | ✅ | ✅ | ✅ | ✅ |
== | 相等比较 | ✅ | ✅ | ✅ | ✅ |
del | 删除元素 | ❌ | ✅ | ❌ | ✅ |
7. 方法分类统计表
| 类型 | 修改方法 | 查询方法 | 创建方法 | 总方法数 |
|---|---|---|---|---|
| 字符串 | 0 (不可变) | ~40 | 少量 | ~45 |
| 列表 | ~10 | ~4 | 0 | ~14 |
| 元组 | 0 (不可变) | 2 | 0 | 2 |
| 字典 | ~8 | ~5 | 1 (类方法) | ~14 |
8. 常用操作速查表
| 操作 | 字符串 | 列表 | 元组 | 字典 |
|---|---|---|---|---|
| 创建空对象 | ""或str() | []或list() | ()或tuple() | {}或dict() |
| 创建带初始值 | "abc" | [1,2,3] | (1,2,3) | {'a':1} |
| 添加元素 | +或join() | append()/insert() | ❌ | d[key]=value |
| 删除元素 | ❌ | remove()/pop() | ❌ | del d[key]/pop() |
| 修改元素 | ❌ (不可变) | lst[i]=x | ❌ | d[key]=value |
| 获取元素 | s[i] | lst[i] | t[i] | d[key] |
| 切片 | s[1:3] | lst[1:3] | t[1:3] | ❌ |
| 遍历 | for c in s | for i in lst | for i in t | for k in d |
| 复制 | s[:]或s.copy() | lst[:]或lst.copy() | t[:] | d.copy() |
| 检查存在 | sub in s | x in lst | x in t | key in d |
9. 内存和性能特点
| 特性 | 字符串 | 列表 | 元组 | 字典 |
|---|---|---|---|---|
| 可变性 | ❌ 不可变 | ✅ 可变 | ❌ 不可变 | ✅ 可变 |
| 有序性 | ✅ 有序 | ✅ 有序 | ✅ 有序 | ✅ 有序 (Python 3.7+) |
| 允许重复 | ✅ | ✅ | ✅ | ❌ (键唯一) |
| 索引速度 | O(1) | O(1) | O(1) | O(1) (通过键) |
| 查找速度 | O(n) | O(n) | O(n) | O(1) 平均 |
| 插入速度 | ❌ | O(1) 末尾 / O(n) 中间 | ❌ | O(1) 平均 |
| 删除速度 | ❌ | O(n) | ❌ | O(1) 平均 |
| 内存占用 | 小 | 中等 | 小 | 大 |
| 哈希性 | ✅ 可哈希 | ❌ 不可哈希 | ✅ 可哈希 | ❌ 不可哈希 |
10. 实用示例代码
python
# 字符串常用操作 text = " Hello World " print(text.strip()) # "Hello World" print(text.lower()) # " hello world " print(text.replace("World", "Python")) # " Hello Python " print(text.split()) # ['Hello', 'World'] # 列表常用操作 numbers = [1, 2, 3] numbers.append(4) # [1, 2, 3, 4] numbers.insert(0, 0) # [0, 1, 2, 3, 4] numbers.pop() # 返回 4, numbers 变成 [0, 1, 2, 3] numbers.sort(reverse=True) # [3, 2, 1, 0] # 元组常用操作 point = (10, 20) print(point.count(10)) # 1 print(point.index(20)) # 1 # point[0] = 30 # 错误!元组不可变 # 字典常用操作 person = {'name': 'Alice', 'age': 25} print(person.get('name')) # 'Alice' print(person.get('email', 'N/A')) # 'N/A' person.update({'city': 'Beijing'}) # 添加新键值对 email = person.pop('email', None) # 安全删除,返回 None总结
字符串:方法最多,功能最丰富,但不可变
列表:最灵活,支持增删改查,适合动态数据
元组:方法最少,不可变,适合固定数据
字典:键值对存储,查询最快,适合映射关系
Python 字符串、列表、元组、字典的通用方法总结
1. 核心通用方法/操作表
| 方法/操作 | 字符串 | 列表 | 元组 | 字典 | 说明 |
|---|---|---|---|---|---|
len() | ✅ | ✅ | ✅ | ✅ | 返回长度/元素个数 |
in/not in | ✅ | ✅ | ✅ | ✅ | 成员检查(字典检查键) |
for ... in | ✅ | ✅ | ✅ | ✅ | 迭代遍历 |
+运算符 | ✅ | ✅ | ✅ | ❌ | 连接(字典不支持) |
*运算符 | ✅ | ✅ | ✅ | ❌ | 重复(字典不支持) |
==比较 | ✅ | ✅ | ✅ | ✅ | 相等性比较 |
!=比较 | ✅ | ✅ | ✅ | ✅ | 不等性比较 |
copy() | ✅ | ✅ | ❌ | ✅ | 浅拷贝(元组无此方法) |
count() | ✅ | ✅ | ✅ | ❌ | 统计元素出现次数 |
index() | ✅ | ✅ | ✅ | ❌ | 查找索引(字典无此方法) |
isinstance() | ✅ | ✅ | ✅ | ✅ | 类型检查 |
sorted() | ✅ | ✅ | ✅ | ✅ | 返回排序列表 |
reversed() | ✅ | ✅ | ✅ | ❌ | 反向迭代(字典无序) |
max() | ✅ | ✅ | ✅ | ✅ | 最大值(字典比较键) |
min() | ✅ | ✅ | ✅ | ✅ | 最小值(字典比较键) |
sum() | ❌ | ✅ | ✅ | ❌ | 求和(字符串/字典不支持) |
any() | ✅ | ✅ | ✅ | ✅ | 是否有真值 |
all() | ✅ | ✅ | ✅ | ✅ | 是否全是真值 |
enumerate() | ✅ | ✅ | ✅ | ❌ | 枚举索引-值对 |
2. 详细功能对比表
| 功能分类 | 通用操作 | 字符串 | 列表 | 元组 | 字典 | 注意事项 |
|---|---|---|---|---|---|---|
| 长度获取 | len(obj) | ✅ 字符数 | ✅ 元素数 | ✅ 元素数 | ✅ 键值对数 | 所有类型都支持 |
| 成员判断 | x in obj | 子串/字符 | 元素 | 元素 | 键 | 字典只检查键,不检查值 |
| 非成员判断 | x not in obj | ✅ | ✅ | ✅ | ✅ | 同上 |
| 迭代遍历 | for i in obj | 遍历字符 | 遍历元素 | 遍历元素 | 遍历键 | 字典遍历的是键 |
| 相等比较 | obj1 == obj2 | 值比较 | 值比较 | 值比较 | 键值对比较 | 顺序也影响结果 |
| 浅拷贝 | obj.copy() | ✅ | ✅ | ❌ | ✅ | 元组用tuple()或切片 |
| 类型检查 | isinstance(obj, type) | ✅ | ✅ | ✅ | ✅ | 检查对象类型 |
| 排序 | sorted(obj) | 返回字符列表 | 返回新列表 | 返回新列表 | 返回键列表 | 不改变原对象 |
| 反转 | reversed(obj) | 返回反转迭代器 | 返回反转迭代器 | 返回反转迭代器 | ❌ | 字典无序不支持 |
| 最大值 | max(obj) | 最大字符(ASCII) | 最大元素 | 最大元素 | 最大键 | 字典比较的是键 |
| 最小值 | min(obj) | 最小字符(ASCII) | 最小元素 | 最小元素 | 最小键 | 字典比较的是键 |
| 真值检查 | any(obj) | 是否有非空字符 | 是否有真值元素 | 是否有真值元素 | 是否有真值键值 | 字典检查值 |
| 全真检查 | all(obj) | 是否全非空字符 | 是否全真值 | 是否全真值 | 是否全真值 | 字典检查值 |
| 枚举 | enumerate(obj) | ✅ | ✅ | ✅ | ❌ | 返回索引-元素对 |
| 压缩 | zip(obj1, obj2) | ✅ | ✅ | ✅ | ✅ | 并行迭代多个序列 |
3. 成员检查 (in运算符) 详细对比
| 类型 | 检查内容 | 示例 | 结果 |
|---|---|---|---|
| 字符串 | 子串或单个字符 | "lo" in "hello" | True |
| 字符串 | 子串或单个字符 | "x" in "hello" | False |
| 列表 | 元素 | 2 in [1,2,3] | True |
| 列表 | 元素 | 5 in [1,2,3] | False |
| 元组 | 元素 | 2 in (1,2,3) | True |
| 元组 | 元素 | 5 in (1,2,3) | False |
| 字典 | 键(不是值) | "a" in {"a":1, "b":2} | True |
| 字典 | 键(不是值) | 1 in {"a":1, "b":2} | False |
python
# 字典成员检查示例 d = {'name': 'Alice', 'age': 25} print('name' in d) # True (检查键) print('Alice' in d) # False (不检查值) print('Alice' in d.values()) # True (显式检查值)4. 迭代遍历 (for...in) 详细对比
| 类型 | 遍历内容 | 示例代码 | 输出 |
|---|---|---|---|
| 字符串 | 字符 | for c in "abc": print(c) | a b c |
| 列表 | 元素 | for i in [1,2,3]: print(i) | 1 2 3 |
| 元组 | 元素 | for i in (1,2,3): print(i) | 1 2 3 |
| 字典 | 键 | for k in {'a':1,'b':2}: print(k) | a b |
python
# 字典遍历的变体 d = {'a': 1, 'b': 2} # 遍历键 for key in d: print(key) # a, b # 遍历值 for value in d.values(): print(value) # 1, 2 # 遍历键值对 for key, value in d.items(): print(key, value) # a 1, b 25. 排序相关对比
| 操作 | 字符串 | 列表 | 元组 | 字典 |
|---|---|---|---|---|
sorted(obj) | 返回字符列表 | 返回新列表 | 返回新列表 | 返回键的排序列表 |
obj.sort() | ❌ 无此方法 | ✅ 原地排序 | ❌ 无此方法 | ❌ 无此方法 |
reversed(obj) | 返回反转迭代器 | 返回反转迭代器 | 返回反转迭代器 | ❌ 不支持 |
python
# 排序示例 s = "cba" lst = [3, 1, 2] tup = (3, 1, 2) d = {'b': 2, 'a': 1, 'c': 3} print(sorted(s)) # ['a', 'b', 'c'] print(sorted(lst)) # [1, 2, 3] print(sorted(tup)) # [1, 2, 3] print(sorted(d)) # ['a', 'b', 'c'] (对键排序)6. 最大值/最小值对比
| 类型 | max(obj)行为 | min(obj)行为 | 示例 |
|---|---|---|---|
| 字符串 | 最大 ASCII 字符 | 最小 ASCII 字符 | max("abc")→'c' |
| 列表 | 最大元素 | 最小元素 | max([1,2,3])→3 |
| 元组 | 最大元素 | 最小元素 | max((1,2,3))→3 |
| 字典 | 最大键 | 最小键 | max({'a':1,'b':2})→'b' |
python
# 字典 max/min 示例 d = {'apple': 5, 'banana': 3, 'cherry': 8} print(max(d)) # 'cherry' (键的最大值) print(min(d)) # 'apple' (键的最小值) # 按值找最大/最小 print(max(d, key=d.get)) # 'cherry' (值的最大键) print(min(d, key=d.get)) # 'banana' (值的最小键)7. 类型检查方法
| 方法 | 用途 | 示例 |
|---|---|---|
isinstance(obj, type) | 检查对象类型 | isinstance("abc", str)→True |
type(obj) | 获取对象类型 | type([1,2])→<class 'list'> |
issubclass(cls, classinfo) | 检查是否为子类 | issubclass(list, object)→True |
python
# 通用类型检查示例 def process_sequence(data): if isinstance(data, (list, tuple)): return len(data) elif isinstance(data, dict): return len(data.keys()) elif isinstance(data, str): return len(data) else: return None print(process_sequence("hello")) # 5 print(process_sequence([1,2,3])) # 3 print(process_sequence((1,2,3,4))) # 4 print(process_sequence({'a':1})) # 18. 真值检查对比
| 类型 | any()行为 | all()行为 |
|---|---|---|
| 字符串 | 是否有非空字符 | 是否所有字符都非空 |
| 列表 | 是否有真值元素 | 是否所有元素为真值 |
| 元组 | 是否有真值元素 | 是否所有元素为真值 |
| 字典 | 是否有真值(检查值) | 是否所有值为真值 |
python
# any() 和 all() 示例 print(any("hello")) # True (有非空字符) print(any("")) # False (空字符串) print(any([0, False, 1])) # True (有真值) print(all([1, 2, 3])) # True (全为真) print(all([1, 0, 3])) # False (有假值) # 字典示例 d1 = {'a': 1, 'b': 0} d2 = {'a': 1, 'b': 2} print(any(d1.values())) # True (有真值 1) print(all(d1.values())) # False (有假值 0) print(all(d2.values())) # True (全真值)9. 枚举和压缩对比
| 操作 | 字符串 | 列表 | 元组 | 字典 |
|---|---|---|---|---|
enumerate() | ✅ 索引-字符 | ✅ 索引-元素 | ✅ 索引-元素 | ❌ 不适用 |
zip() | ✅ 并行迭代字符 | ✅ 并行迭代元素 | ✅ 并行迭代元素 | ✅ 并行迭代键/值 |
python
# enumerate 示例 for i, char in enumerate("abc"): print(i, char) # 0 a, 1 b, 2 c for i, item in enumerate([10, 20, 30]): print(i, item) # 0 10, 1 20, 2 30 # zip 示例 names = ["Alice", "Bob"] ages = [25, 30] for name, age in zip(names, ages): print(f"{name}: {age}") # 字典与 zip keys = ['a', 'b', 'c'] values = [1, 2, 3] d = dict(zip(keys, values)) print(d) # {'a': 1, 'b': 2, 'c': 3}10. 实际应用:通用函数示例
python
def analyze_sequence(data): """ 通用的序列分析函数 适用于字符串、列表、元组、字典 """ print(f"类型: {type(data).__name__}") print(f"长度: {len(data)}") # 成员检查(需要适应不同类型) if isinstance(data, dict): print(f"是否包含键 'a': {'a' in data}") else: print(f"是否包含 'a': {'a' in data}") # 迭代显示前3个元素 print("前3个元素:", end=" ") count = 0 for item in data: if count >= 3: break print(item, end=" ") count += 1 print() # 最大值/最小值 try: print(f"最大值: {max(data)}") print(f"最小值: {min(data)}") except TypeError: print("无法比较大小") # 真值检查 if isinstance(data, dict): print(f"是否有真值: {any(data.values())}") print(f"是否全真值: {all(data.values())}") else: print(f"是否有真值: {any(data)}") print(f"是否全真值: {all(data)}") # 测试不同数据类型 analyze_sequence("hello123") print("-" * 40) analyze_sequence([1, 2, 3, 0, 5]) print("-" * 40) analyze_sequence((10, 20, 30)) print("-" * 40) analyze_sequence({'a': 1, 'b': 2, 'c': 0})11. 不支持的操作总结
| 操作 | 字符串 | 列表 | 元组 | 字典 | 原因 |
|---|---|---|---|---|---|
append() | ❌ | ✅ | ❌ | ❌ | 字符串/元组不可变 |
remove() | ❌ | ✅ | ❌ | ❌ | 字符串/元组不可变 |
pop() | ❌ | ✅ | ❌ | ✅ | 字符串/元组不可变 |
sort() | ❌ | ✅ | ❌ | ❌ | 元组不可变,字典无序 |
update() | ❌ | ❌ | ❌ | ✅ | 仅字典支持 |
keys() | ❌ | ❌ | ❌ | ✅ | 仅字典支持 |
values() | ❌ | ❌ | ❌ | ✅ | 仅字典支持 |
items() | ❌ | ❌ | ❌ | ✅ | 仅字典支持 |
总结
所有类型都支持的核心操作:
len()- 获取长度in/not in- 成员检查for...in- 迭代遍历==/!=- 相等比较isinstance()- 类型检查sorted()- 排序(返回列表)max()/min()- 最值any()/all()- 真值检查
关键差异:
字典的
in检查的是键,而不是值字典的迭代遍历的是键
字符串/元组不可变,所以没有修改方法
字典不支持
+、*、reversed()等操作
理解这些通用方法和差异,可以写出更通用、更灵活的代码!