【Python】列表(List)从入门到精通深度详解
(2026 最新版,适合所有 Python 开发者)
列表(list)是 Python 中最重要、最常用、最灵活的数据结构,被称为“Python 的瑞士军刀”。掌握列表,能让你写出简洁、高效、Pythonic 的代码。
1. 列表基础
# 创建列表
empty = []
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True, None, [1,2,3]]
# 类型
print(type(numbers)) # <class 'list'>
print(len(numbers)) # 5
核心特性:
- 有序:元素有索引位置(从 0 开始)
- 可变(Mutable):内容可以随时增删改
- 异构:可以存放不同类型的数据
- 动态:大小可以任意变化(底层是动态数组)
2. 常用操作速查表(必须熟练掌握)
2.1 增
lst = [1, 2, 3]
lst.append(4) # 尾部追加单个元素 → [1,2,3,4]
lst.extend([5, 6, 7]) # 尾部追加可迭代对象 → [1,2,3,4,5,6,7]
lst.insert(0, 0) # 指定位置插入 → [0,1,2,3,4,5,6,7]
lst += [8, 9] # 等价于 extend
2.2 删
lst.pop() # 删除并返回最后一个元素
lst.pop(0) # 删除并返回指定索引元素
lst.remove(5) # 删除第一个值为5的元素(值删除)
del lst[2] # 根据索引删除(推荐)
del lst[1:4] # 切片删除
lst.clear() # 清空列表
2.3 改
lst[0] = 100 # 修改单个元素
lst[1:3] = [200, 300] # 切片修改(长度可变!)
2.4 查
if 100 in lst:
print("存在")
idx = lst.index(300) # 返回第一个出现的索引(不存在报错)
count = lst.count(100) # 统计出现次数
3. 切片(Slicing)—— Python 最优雅的特性之一
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:7]) # [2,3,4,5,6] 前闭后开
print(nums[:5]) # [0,1,2,3,4]
print(nums[5:]) # [5,6,7,8,9]
print(nums[::2]) # [0,2,4,6,8] 步长2
print(nums[::-1]) # [9,8,7,6,5,4,3,2,1,0] 反转(最常用!)
print(nums[1:8:3]) # [1,4,7]
重要技巧:
lst[:]→ 浅拷贝列表lst[::-1]→ 反转列表(比reversed()更快)- 切片赋值可以改变列表长度
4. 列表推导式(List Comprehension)—— Pythonic 精髓
# 基础
squares = [x**2 for x in range(10)]
# 带条件
evens = [x for x in range(20) if x % 2 == 0]
# 嵌套
matrix = [[1,2,3], [4,5,6], [7,8,9]]
flat = [num for row in matrix for num in row] # 展平二维列表
# 带 if-else
labels = ["大" if x >= 60 else "小" for x in [55, 68, 72]]
性能:列表推导式通常比 for + append 更快、更清晰。
5. 高级用法与技巧
5.1 解包(Unpacking)
a, b, *rest = [1, 2, 3, 4, 5]
print(a, b, rest) # 1 2 [3,4,5]
first, *middle, last = [10, 20, 30, 40, 50]
5.2 排序与反转
lst.sort() # 原地排序(推荐)
lst.sort(reverse=True)
new_lst = sorted(lst) # 返回新列表
lst.reverse() # 原地反转
new_lst = list(reversed(lst)) # 返回迭代器转列表
5.3 常用内置函数搭配
max(lst), min(lst), sum(lst)
any(lst), all(lst)
enumerate(lst) # 带索引遍历
zip(lst1, lst2) # 并行遍历
6. 性能与内存优化(进阶必知)
- 列表是动态数组:
append摊销 O(1),但频繁insert(0)是 O(n),很慢。 - 容量预分配:提前知道大小可使用
lst = [0] * n或列表推导式。 - 浅拷贝 vs 深拷贝:
import copy
lst2 = lst[:] # 浅拷贝(推荐简单情况)
lst3 = copy.deepcopy(lst) # 深拷贝(嵌套列表时使用)
避免的坏习惯:
# 反例:循环中频繁 insert(0)
for i in range(10000):
lst.insert(0, i) # 非常慢!O(n²)
7. 生产级最佳实践总结
- 需要频繁在头部操作 → 使用
collections.deque(双端队列,双端 O(1)) - 只读遍历 → 优先使用元组
tuple(不可变,更省内存) - 去重并保持顺序 →
dict.fromkeys(lst).keys()(Python 3.7+ 保持顺序) - 扁平化嵌套列表 →
itertools.chain.from_iterable()或列表推导式 - 大列表内存优化 → 使用生成器表达式
(x for x in lst)而非列表推导式
8. 经典面试题速记
- 列表和元组的区别?
- 如何实现列表去重并保持原有顺序?
lst.append(lst)后lst的长度和内容是什么?- 列表推导式和
for循环的性能对比? - 如何高效反转列表?
一句话总结:
列表是 Python 的核心容器,熟练掌握增删改查 + 切片 + 列表推导式 = 写出优雅 Python 代码的基础。
需要我继续补充以下任意内容,随时告诉我:
collections.deque与list深度对比- 列表作为函数默认参数的陷阱及解决
- 多维列表(矩阵)操作技巧
- 列表 vs NumPy array 性能对比
- 100 道列表高频面试题精选
掌握列表后,你的 Python 基础将真正扎实!继续加油!🐍✨