List(列表)是 Python 中最基本、最常用的数据结构之一,它是一个有序的可变序列,可以包含任意类型的元素。
1. 列表的基本特性
- 有序集合:元素按插入顺序存储可变类型:可以修改、添加或删除元素可包含任意类型:一个列表中可以混合存储不同类型的数据支持索引和切片:可以通过位置访问元素
2. 创建列表
# 空列表empty_list = []empty_list = list()# 包含元素的列表numbers = [1, 2, 3, 4, 5]mixed = [1, "hello", 3.14, True]nested = [[1, 2], [3, 4], [5, 6]]# 使用 list() 构造函数chars = list("hello") # ['h', 'e', 'l', 'l', 'o']
3. 访问列表元素
fruits = ['apple', 'banana', 'cherry', 'date']# 正向索引(从0开始)print(fruits[0]) # 'apple'print(fruits[2]) # 'cherry'# 负向索引(从-1开始)print(fruits[-1]) # 'date'print(fruits[-3]) # 'banana'# 切片操作 [start:stop:step]print(fruits[1:3]) # ['banana', 'cherry']print(fruits[:2]) # ['apple', 'banana']print(fruits[::2]) # ['apple', 'cherry']print(fruits[::-1]) # 反转列表 ['date', 'cherry', 'banana', 'apple']
4. 修改列表
# 修改单个元素fruits[1] = 'blueberry'# 修改切片fruits[1:3] = ['blackberry', 'cantaloupe']# 添加元素fruits.append('elderberry') # 添加到末尾fruits.insert(2, 'coconut') # 在指定位置插入# 合并列表more_fruits = ['fig', 'grape']fruits.extend(more_fruits) # 或 fruits += more_fruits
5. 删除元素
# 按值删除fruits.remove('banana') # 删除第一个匹配项# 按索引删除del fruits[0] # 删除第一个元素popped = fruits.pop(2) # 删除并返回第三个元素popped_last = fruits.pop() # 删除并返回最后一个元素# 清空列表fruits.clear()
6. 列表常用方法
方法 | 描述 |
---|---|
append(x) | 在末尾添加元素 x |
extend(iterable) | 扩展列表,添加可迭代对象的所有元素 |
insert(i, x) | 在位置 i 插入元素 x |
remove(x) | 删除第一个值为 x 的元素 |
pop([i]) | 删除并返回位置 i 的元素(默认最后一个) |
clear() | 清空列表 |
index(x[, start[, end]]) | 返回第一个值为 x 的元素的索引 |
count(x) | 返回 x 在列表中出现的次数 |
sort(key=None, reverse=False) | 原地排序列表 |
reverse() | 原地反转列表 |
copy() | 返回列表的浅拷贝 |
7. 列表操作
# 长度length = len(fruits)# 成员检查if 'apple' in fruits: print("Apple is in the list")# 遍历列表for fruit in fruits: print(fruit)# 带索引遍历for index, fruit in enumerate(fruits): print(f"{index}: {fruit}")# 列表推导式squares = [x**2 for x in range(10)]even_squares = [x**2 for x in range(10) if x % 2 == 0]
8. 列表排序
numbers = [3, 1, 4, 1, 5, 9, 2]# 原地排序numbers.sort() # 升序numbers.sort(reverse=True) # 降序# 返回新列表sorted_numbers = sorted(numbers)sorted_numbers_desc = sorted(numbers, reverse=True)# 自定义排序words = ['banana', 'pie', 'Washington', 'book']words.sort(key=len) # 按长度排序words.sort(key=str.lower) # 不区分大小写排序
9. 列表复制
original = [1, 2, 3]# 浅拷贝copy1 = original.copy()copy2 = list(original)copy3 = original[:]# 深拷贝(用于嵌套列表)import copydeep_copy = copy.deepcopy(original)
10. 列表与性能
时间复杂度:
- 索引访问:O(1)追加(append):平均 O(1)插入(insert):O(n)删除(remove/pop):O(n)包含检查(in):O(n)排序:O(n log n)
内存考虑:列表会预先分配额外空间以减少频繁调整大小的开销
11. 实际应用示例
# 矩阵运算matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]# 转置矩阵transposed = [[row[i] for row in matrix] for i in range(3)]# 栈(后进先出)stack = []stack.append(1) # pushstack.append(2)top = stack.pop() # pop -> 2# 队列(先进先出)from collections import dequequeue = deque(["Eric", "John", "Michael"])queue.append("Terry") # 入队queue.popleft() # 出队 -> "Eric"
列表是 Python 编程中最常用的数据结构之一,熟练掌握列表操作对于编写高效、简洁的 Python 代码至关重要。