目录
前言
在 Python 中,列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)是四种最常用的数据结构,它们各自拥有独特的特性和方法。掌握这些方法是高效处理数据的基础。本文将系统梳理这四种数据结构的核心方法,并通过实例说明其用法,帮助开发者快速查阅和应用。
一.列表(list):有序可变的元素集合
列表是 Python 中最灵活的序列类型,元素可修改、可重复,支持索引和切片操作。
1.增删改查核心方法
方法 | 功能描述 | 示例 |
---|---|---|
append(x) | 在末尾位置添加元素x | lst = [1,2]; lst.append(3) [1,2,3] |
remove(x) | 删除列表中的x元素 | lst[1,2,3];lst.remove(3) [1,2] |
insert(i,x) | 在列表索引i处添加元素x | lst = [1,2,3] [1, 4, 2, 3] |
updata(x) | 合并另一个可迭代类型x | lst = [1,2,3] [1, 2, 3, 1, 4, 2] |
pop(i) | 删除索引为i的元素,并返回值(默认为最后一位) | lst = [1,2,3] [2, 3] |
index(x) | 查找x元素的索引,找不到则报错 | lst = [1,2,3] 0 |
clear() | 删除所有元素 | lst.clear() |
count(x) | 统计x元素在列表出现的次数 | lst = [1,1,3,4,5] print(lst.count(1)) 2. |
2.排序与反转
sort(key=None, reverse=False)
:对列表就地排序(默认升序,reverse=True
为降序)
lst = [3,1,2]
lst.sort()
lst.sort(reverse=True)
结果
[1,2,3]
[3,2,1]
reverse()
:反转列表元素顺序(就地修改)
lst = [1,2,3]
lst.reverse()
结果
[3,2,1]
3.列表推导式(高效创建列表)
列表推导式(List Comprehension)是Python中一种简洁高效的创建列表的方式,通过一行代码即可生成列表,常用于替代循环和map()
、filter()
等函数
[expression for item in iterable if condition]
- expression:对当前元素的处理表达式。
- item:迭代变量,取自可迭代对象(如列表、字符串等)。
- condition:可选过滤条件,仅保留满足条件的元素。
常见用法示例
生成平方数列表
squares = [x**2 for x in range(5)] # 输出:[0, 1, 4, 9, 16]
过滤偶数
evens = [x for x in range(10) if x % 2 == 0] # 输出:[0, 2, 4, 6, 8]
嵌套循环
pairs = [(x, y) for x in [1, 2] for y in [3, 4]]
# 输出:[(1, 3), (1, 4), (2, 3), (2, 4)]
二、元组(Tuple):有序不可变的元素集合
元组与列表类似,但元素一旦定义不可修改,适合存储不可变数据(如坐标、配置参数)。其方法较少,主要用于查询。
核心方法
方法 | 功能描述 | 示例 |
---|---|---|
index(x,start,stop) | 从start开始查找x元素位置到stop停止 | tu = (1,2,3) |
count(x) | 查找x元素出现的次数 | tu = (1,2,3) 1 |
特性说明
- 元组不可修改,因此没有
append
、remove
等修改方法。 - 可通过切片创建新元组(原元组不变):
tup = (1,2,3)
new_tup = tup[1:]
(2,3)
三、字典(Dictionary):键值对映射的无序集合
字典以key:value
形式存储数据,键(key)唯一且不可变,值(value)可任意类型,适合存储关联数据(如用户信息)。
1. 增删改查核心方法
方法 | 功能描述 | 示例 |
---|---|---|
get(x,-1) | 通过键值 | dc = { |
keys() | 返回所有键的视图 | dc = { dict_keys(['id', 'name']) |
values() | 返回字典所有值 | dc = { dict_values([101, 'xm']) |
items() | 返回所有字典内容 | dc = { dict_items([('id', 101), ('name', 'xm')]) |
update() | 合并一个字典,重复键会被覆盖 | dc = { {'id': 101, 'name': 'xm', 'age': 21} |
pop(x) | 根据键值x删除对应内容,并返回删除的内容 | dc = { xm |
popitem() | 删除最后一个插入字典的键值对,并返回删除的内容 | dc = { ('name', 'xm') |
clear() | 删除字典所有内容 | dc = { {} |
2. 字典推导式(高效创建字典)
# 将列表转换为值为索引的字典
lst = ['a','b','c']
dic = {v:k for k,v in enumerate(lst)}
print(dic) # {'a':0, 'b':1, 'c':2}
3. 注意事项
- 键必须是不可变类型(如字符串、数字、元组),列表不能作为键。
四、集合(Set):无序唯一元素的集合
集合用于存储唯一元素,支持数学中的交集、并集等运算,适合去重和关系判断。
1. 增删核心方法
方法 | 功能描述 | 示例 |
---|---|---|
update(iter) | 合并另一个可迭代对象的元素(去重) | st = {1,3,4,5} {1, 2, 3, 4, 5, 7, 9} |
add(x) | 向集合添加x元素,如果已存在则忽略 | st = {1,3,4,5} {1, 2, 3, 4, 5} |
pop() | 顺序删除集合内元素,并返回删除的元素(空集合报错) | st = {1,3,4,5} {3, 4, 5} |
discard(x) | 删除元素x,不存在则忽略 | st = {1,2,3,4} {1, 2, 4} |
remove(x) | 删除元素x,不存在则报错 | st = {1,2,3,4} {2, 3, 4} |
clear() | 清除集合内所有元素 | st = {1,2,3,4} set() |
2. 集合运算方法
方法 | 功能描述 | 示例 |
---|---|---|
union(x) | 并集 | st2 = {3,2,5,7,9} {1, 2, 3, 4, 5, 7, 9} |
intersection(x) | 交集 | st2 = {3,2,5,7,9} {2, 3} |
difference(x) | 差集 | st2 = {3,2,5,7,9} {1, 4} |
st.issubset(st2) | 判断st是不是st2的子集 | st2 = {3,2,5,7,9} False |
st.issuperset(st2) | 判断st是不是st2的超集(st2是不是st的子集) | st2 = {3,2,5,7,9} True |
3. 集合推导式(高效创建集合)
# 生成1-10的偶数集合
even_set = {x for x in range(1,11) if x % 2 == 0}
print(even_set) # {2,4,6,8,10}
五、四种数据结构的对比与适用场景
数据结构 | 有序性 | 可变性 | 元素唯一性 | 核心特点 | 适用场景 |
---|---|---|---|---|---|
列表 | 有序 | 可变 | 可重复 | 支持索引、切片,适合动态数据 | 存储序列数据(如日志、列表) |
元组 | 有序 | 不可变 | 可重复 | 占用内存少,适合常量数据 | 存储固定配置(如坐标、参数) |
字典 | 3.7 + 有序 | 可变 | 键唯一 | 键值映射,查询效率高 | 存储关联数据(如用户信息、配置表) |
集合 | 无序 | 可变 | 元素唯一 | 支持数学运算,去重效率高 | 去重、关系判断(如交集、并集) |
六、实战技巧:方法选择与性能优化
1.列表去重:
利用集合特性快速去重,再转回列表
lst = [1,2,2,3]
unique_lst = list(set(lst)) # [1,2,3](注意无序)
2.字典遍历:
使用items()
同时获取键值对,比单独获取键再取值更高效
dic = {'a':1, 'b':2}
for k, v in dic.items(): # 推荐
print(k, v)
3.避免列表频繁修改:
列表头部插入(insert(0, x)
)效率低,可改用collections.deque
的appendleft()
4.集合去重 vs 字典去重:
当需要保留顺序时,可用字典键的唯一性(Python 3.7+)
lst = [1,2,2,3]
unique_lst = list(dict.fromkeys(lst)) # [1,2,3](保留顺序)
总结
列表、元组、字典、集合是 Python 数据处理的基石,掌握它们的方法能显著提升代码效率。列表适合动态序列,元组适合固定数据,字典适合键值关联,集合适合去重与关系运算。在实际开发中,需根据数据特性和业务场景选择合适的数据结构,并灵活运用其方法简化逻辑。
建议收藏本文作为速查表,在实践中逐步熟练各方法的细节与差异,让代码更简洁、高效