【Python】列表

【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. 生产级最佳实践总结

  1. 需要频繁在头部操作 → 使用 collections.deque(双端队列,双端 O(1))
  2. 只读遍历 → 优先使用元组 tuple(不可变,更省内存)
  3. 去重并保持顺序dict.fromkeys(lst).keys()(Python 3.7+ 保持顺序)
  4. 扁平化嵌套列表itertools.chain.from_iterable() 或列表推导式
  5. 大列表内存优化 → 使用生成器表达式 (x for x in lst) 而非列表推导式

8. 经典面试题速记

  • 列表和元组的区别?
  • 如何实现列表去重并保持原有顺序?
  • lst.append(lst)lst 的长度和内容是什么?
  • 列表推导式和 for 循环的性能对比?
  • 如何高效反转列表?

一句话总结

列表是 Python 的核心容器,熟练掌握增删改查 + 切片 + 列表推导式 = 写出优雅 Python 代码的基础。

需要我继续补充以下任意内容,随时告诉我:

  • collections.dequelist 深度对比
  • 列表作为函数默认参数的陷阱及解决
  • 多维列表(矩阵)操作技巧
  • 列表 vs NumPy array 性能对比
  • 100 道列表高频面试题精选

掌握列表后,你的 Python 基础将真正扎实!继续加油!🐍✨

文章已创建 5103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部