Python 列表
列表(List)是 Python 中最灵活的数据结构,用于存储有序、可变的元素集合。列表可以包含不同类型的数据,支持动态增删改查操作。
一、列表基础操作
操作 | 语法 | 示例 | 结果 |
---|---|---|---|
创建 | [] 或 list() | fruits = ["apple", "banana", "cherry"] | 三元素列表 |
访问 | list[index] | fruits[1] | "banana" |
负索引 | list[-n] | fruits[-1] | "cherry" |
切片 | list[start:end:step] | fruits[0:2] | ["apple", "banana"] |
长度 | len(list) | len(fruits) | 3 |
存在检查 | in 操作符 | "apple" in fruits | True |
二、列表修改方法
方法 | 描述 | 示例 | 修改后列表 |
---|---|---|---|
append(x) | 尾部添加元素 | fruits.append("orange") | [..., "orange"] |
insert(i, x) | 指定位置插入 | fruits.insert(1, "mango") | ["apple", "mango", ...] |
extend(iter) | 合并另一列表 | fruits.extend(["grape", "kiwi"]) | [..., "grape", "kiwi"] |
remove(x) | 删除首个匹配项 | fruits.remove("banana") | 移除 "banana" |
pop([i]) | 删除并返回元素 | fruits.pop(0) | 移除首位,返回 "apple" |
clear() | 清空列表 | fruits.clear() | [] |
注意:直接修改原列表(原地操作),返回 None
三、列表信息获取
方法 | 描述 | 示例 | 返回值 |
---|---|---|---|
index(x) | 元素首次出现位置 | [10,20,30].index(20) | 1 |
count(x) | 元素出现次数 | [1,2,1,3].count(1) | 2 |
max() | 最大值 | max([5,2,8]) | 8 |
min() | 最小值 | min([5,2,8]) | 2 |
sum() | 数值列表求和 | sum([1,2,3]) | 6 |
四、列表排序与反转
方法 | 描述 | 示例 | 结果 |
---|---|---|---|
sort() | 原地排序 | nums = [3,1,4]; nums.sort() | [1,3,4] |
sorted() | 返回新排序列表 | sorted([3,1,4]) | [1,3,4] |
reverse() | 原地反转 | nums.reverse() | [4,3,1] |
reversed() | 返回反转迭代器 | list(reversed(nums)) | [4,3,1] |
高级排序:
# 按字符串长度排序
words = ["apple", "kiwi", "banana"]
words.sort(key=len) # ['kiwi', 'apple', 'banana']
# 多级排序
students = [("Alice", 20), ("Bob", 18), ("Charlie", 20)]
students.sort(key=lambda x: (x[1], x[0]))
# [('Bob', 18), ('Alice', 20), ('Charlie', 20)]
五、列表复制机制
方法 | 描述 | 内存影响 |
---|---|---|
直接赋值 | b = a | 共享内存(修改同步) |
浅拷贝 | b = a.copy() 或 b = a[:] | 只复制一层(嵌套对象共享) |
深拷贝 | import copy; b = copy.deepcopy(a) | 完全独立副本 |
# 浅拷贝示例
a = [1, [2, 3]]
b = a.copy()
b[1][0] = 99
print(a) # [1, [99, 3]] (嵌套列表被修改)
# 深拷贝解决
from copy import deepcopy
c = deepcopy(a)
c[1][0] = 100
print(a) # [1, [99, 3]] (原列表不变)
六、列表推导式
简洁创建新列表(比循环高效)
# 基本形式
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]
# 嵌套循环
matrix = [[1,2], [3,4], [5,6]]
flat = [num for row in matrix for num in row] # [1,2,3,4,5,6]
# 条件表达式
labels = ["Pass" if score >=60 else "Fail" for score in [75,45,90]]
# ['Pass','Fail','Pass']
七、多维列表(嵌套列表)
# 创建二维列表(矩阵)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 访问元素
print(matrix[1][2]) # 6 (第二行第三列)
# 遍历多维列表
for row in matrix:
for num in row:
print(num, end=' ')
print()
# 输出:
# 1 2 3
# 4 5 6
# 7 8 9
八、列表与迭代器
# 生成器表达式(节省内存)
big_data = (x**2 for x in range(1000000)) # 不立即创建元素
# 枚举遍历
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
# 同时遍历多个列表
names = ["Alice", "Bob"]
scores = [85, 92]
for name, score in zip(names, scores):
print(f"{name}: {score}")
九、性能优化技巧
预分配空间(大数据处理)
arr = [None] * 1000 # 创建1000个空位的列表
2.避免中间变量(链式操作)
# 差
temp = data.strip().split(',')
result = [x for x in temp if x]
# 佳
result = [x for x in data.strip().split(',') if x]
3.选择合适数据结构:
频繁插入/删除 → collections.deque
唯一元素检查 → set
键值对存储 → dict
4.切片替代循环(高效批量修改)
nums = [1,2,3,4,5]
nums[1:4] = [20, 30, 40] # 直接替换子列表
十、常见错误
索引越界
lst = [1,2,3]
print(lst[3]) # IndexError
2.空列表操作
empty = []
empty.pop() # IndexError
3.修改迭代中的列表
numbers = [1,2,3,4]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 导致意外跳过元素
4.误用可变默认参数
def add_item(item, lst=[]): # 默认列表会持久化
lst.append(item)
return lst
print(add_item(1)) # [1]
print(add_item(2)) # [1,2] (非预期结果)