1. 什么是Python列表?
Python列表(List)是Python中最基本、最常用的数据结构之一。它是一个有序、可变的序列,可以存储任意类型的元素,包括数字、字符串、甚至其他列表(嵌套列表)。
简单来说,列表就像是一个可以装下各种物品的“容器”或“购物车”,你可以随时往里面添加、删除或修改物品。
列表的核心特征:
- 有序性:元素按照插入顺序排列,可以通过位置(索引)访问
- 可变性:创建后可以修改内容(增删改)
- 异构性:可以包含不同类型的元素
- 动态大小:无需预先声明大小,可以随时扩展或收缩
2. 如何创建列表?
Python提供了多种创建列表的方式:
2.1 使用方括号 [](最常用)
# 创建空列表
empty_list = []
# 创建包含元素的列表
numbers = [1, 2, 3, 4, 5]
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
mixed = [1, "hello", 3.14, True, [1, 2, 3]] # 混合类型
2.2 使用 list() 构造函数
# 从字符串创建(每个字符成为列表元素)
chars = list("Python") # 结果:['P', 'y', 't', 'h', 'o', 'n']
# 从元组创建
tuple_data = (1, 2, 3)
list_from_tuple = list(tuple_data) # 结果:[1, 2, 3]
# 从范围创建
numbers = list(range(5)) # 结果:[0, 1, 2, 3, 4]
2.3 使用列表推导式(List Comprehension)
# 创建0-9的平方列表
squares = [x**2 for x in range(10)]
# 结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 创建偶数列表
evens = [x for x in range(20) if x % 2 == 0]
# 结果:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
3. 访问列表元素
3.1 使用索引访问
列表索引从0开始,支持正索引和负索引:
fruits = ["苹果", "香蕉", "橙子", "葡萄", "芒果"]
# 正索引(从左到右)
print(fruits[0]) # "苹果" – 第一个元素
print(fruits[2]) # "橙子" – 第三个元素
# 负索引(从右到左)
print(fruits[–1]) # "芒果" – 最后一个元素
print(fruits[–3]) # "橙子" – 倒数第三个元素
3.2 切片操作(Slicing)
切片用于获取列表的子集,语法:list[start:end:step]
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 基本切片
print(numbers[2:5]) # [2, 3, 4] # 索引2到4(不包含5)
print(numbers[:3]) # [0, 1, 2] # 从开始到索引2
print(numbers[5:]) # [5, 6, 7, 8, 9] # 从索引5到末尾
print(numbers[:]) # 完整列表的副本
# 带步长的切片
print(numbers[::2]) # [0, 2, 4, 6, 8] # 每隔一个取一个
print(numbers[1::2]) # [1, 3, 5, 7, 9] # 从索引1开始每隔一个
print(numbers[::–1]) # 反转列表:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
4. 修改列表内容
4.1 修改单个元素
fruits = ["苹果", "香蕉", "橙子"]
fruits[1] = "草莓" # 将"香蕉"改为"草莓"
print(fruits) # ["苹果", "草莓", "橙子"]
4.2 修改多个元素(切片赋值)
numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [20, 30, 40] # 替换索引1-3的元素
print(numbers) # [1, 20, 30, 40, 5]
# 甚至可以替换为不同数量的元素
numbers[1:4] = [100, 200] # 用两个元素替换三个元素
print(numbers) # [1, 100, 200, 5]
5. 列表常用操作
5.1 添加元素
fruits = ["苹果", "香蕉"]
# append() – 在末尾添加单个元素
fruits.append("橙子") # ["苹果", "香蕉", "橙子"]
# extend() – 在末尾添加多个元素(合并列表)
fruits.extend(["葡萄", "芒果"]) # ["苹果", "香蕉", "橙子", "葡萄", "芒果"]
# insert() – 在指定位置插入元素
fruits.insert(1, "草莓") # 在索引1处插入
# 结果:["苹果", "草莓", "香蕉", "橙子", "葡萄", "芒果"]
5.2 删除元素
fruits = ["苹果", "香蕉", "橙子", "葡萄", "芒果", "香蕉"]
# remove() – 删除第一个匹配的元素
fruits.remove("香蕉") # 删除第一个"香蕉"
# 结果:["苹果", "橙子", "葡萄", "芒果", "香蕉"]
# pop() – 删除并返回指定位置的元素(默认最后一个)
last_fruit = fruits.pop() # 删除并返回"香蕉"
print(last_fruit) # "香蕉"
print(fruits) # ["苹果", "橙子", "葡萄", "芒果"]
second_fruit = fruits.pop(1) # 删除并返回索引1的元素
print(second_fruit) # "橙子"
print(fruits) # ["苹果", "葡萄", "芒果"]
# del语句 – 删除指定位置或切片
del fruits[0] # 删除第一个元素
del fruits[1:] # 删除从索引1开始的所有元素
5.3 查找元素
fruits = ["苹果", "香蕉", "橙子", "葡萄", "芒果", "香蕉"]
# index() – 返回第一个匹配元素的索引
position = fruits.index("香蕉") # 1
# position = fruits.index("西瓜") # 会报错:ValueError
# count() – 统计元素出现次数
banana_count = fruits.count("香蕉") # 2
watermelon_count = fruits.count("西瓜") # 0
# in运算符 – 检查元素是否存在
has_apple = "苹果" in fruits # True
has_watermelon = "西瓜" in fruits # False
5.4 排序和反转
numbers = [3, 1, 4, 1, 5, 9, 2]
# sort() – 原地排序(修改原列表)
numbers.sort() # 升序排序
print(numbers) # [1, 1, 2, 3, 4, 5, 9]
numbers.sort(reverse=True) # 降序排序
print(numbers) # [9, 5, 4, 3, 2, 1, 1]
# sorted() – 返回新排序列表(不修改原列表)
original = [3, 1, 4]
sorted_list = sorted(original) # [1, 3, 4]
print(original) # [3, 1, 4] – 原列表不变
# reverse() – 原地反转
numbers = [1, 2, 3]
numbers.reverse()
print(numbers) # [3, 2, 1]
6. 列表的复制
6.1 浅复制 vs 深复制
# 浅复制(只复制第一层)
original = [1, 2, [3, 4]]
shallow_copy = original.copy() # 或 list(original) 或 original[:]
# 修改浅复制中的不可变元素不影响原列表
shallow_copy[0] = 100
print(original) # [1, 2, [3, 4]] – 不变
print(shallow_copy) # [100, 2, [3, 4]]
# 修改浅复制中的可变元素(嵌套列表)会影响原列表
shallow_copy[2][0] = 300
print(original) # [1, 2, [300, 4]] – 被修改了!
print(shallow_copy) # [100, 2, [300, 4]]
# 深复制(完全独立副本)
import copy
original = [1, 2, [3, 4]]
deep_copy = copy.deepcopy(original)
deep_copy[2][0] = 300
print(original) # [1, 2, [3, 4]] – 不变
print(deep_copy) # [1, 2, [300, 4]]
7. 列表推导式进阶
列表推导式是Python中非常强大的特性,可以简化列表创建和转换:
# 基本形式:[expression for item in iterable]
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
# 带条件的推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0] # [0, 4, 16, 36, 64]
# 嵌套循环
pairs = [(x, y) for x in range(3) for y in range(3)]
# [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)]
# 条件表达式(三元运算)
numbers = [1, –2, 3, –4, 5]
abs_numbers = [x if x >= 0 else –x for x in numbers] # [1, 2, 3, 4, 5]
# 嵌套列表推导式(矩阵转置)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transpose = [[row[i] for row in matrix] for i in range(3)]
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
8. 列表与其他数据结构的转换
# 列表转字符串
fruits = ["苹果", "香蕉", "橙子"]
str_fruits = ", ".join(fruits) # "苹果, 香蕉, 橙子"
# 列表转元组(不可变)
tuple_fruits = tuple(fruits) # ("苹果", "香蕉", "橙子")
# 列表转集合(去重)
numbers = [1, 2, 2, 3, 3, 3]
unique_numbers = set(numbers) # {1, 2, 3}
# 列表转字典(需要键值对)
pairs = [("a", 1), ("b", 2), ("c", 3)]
dict_from_list = dict(pairs) # {"a": 1, "b": 2, "c": 3}
9. 性能考虑与最佳实践
9.1 时间复杂度
- 索引访问:O(1)
- 追加(append):O(1) 平均
- 插入(insert):O(n)
- 删除(pop/remove):O(n)
- 查找(in/index):O(n)
9.2 最佳实践
# 1. 使用列表推导式代替循环(更简洁高效)
# 不推荐:
result = []
for x in range(10):
if x % 2 == 0:
result.append(x**2)
# 推荐:
result = [x**2 for x in range(10) if x % 2 == 0]
# 2. 避免在循环中修改列表长度
# 不推荐:
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers)):
if numbers[i] % 2 == 0:
numbers.pop(i) # 会改变索引,可能导致错误
# 推荐:
numbers = [1, 2, 3, 4, 5]
numbers = [x for x in numbers if x % 2 != 0] # 使用列表推导式
# 3. 使用enumerate同时获取索引和值
fruits = ["苹果", "香蕉", "橙子"]
for i, fruit in enumerate(fruits):
print(f"索引 {i}: {fruit}")
# 4. 使用zip同时遍历多个列表
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}分")
10. 实际应用示例
10.1 学生成绩管理系统
# 初始化学生列表
students = [
{"name": "张三", "scores": [85, 90, 78]},
{"name": "李四", "scores": [92, 88, 95]},
{"name": "王五", "scores": [76, 82, 80]}
]
# 计算每个学生的平均分
for student in students:
scores = student["scores"]
avg_score = sum(scores) / len(scores)
student["average"] = round(avg_score, 2)
# 按平均分排序
students_sorted = sorted(students, key=lambda x: x["average"], reverse=True)
# 输出结果
print("学生成绩排名:")
for i, student in enumerate(students_sorted, 1):
print(f"{i}. {student['name']}: 平均分 {student['average']}")
10.2 数据分析:统计词频
# 统计一段文本中单词的出现频率
text = "apple banana apple orange banana apple grape"
words = text.split() # 分割成单词列表
# 方法1:使用循环
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
# 方法2:使用collections.Counter
from collections import Counter
word_count = Counter(words)
# 找出出现次数最多的单词
most_common = word_count.most_common(2)
print(f"最常见的单词:{most_common}")
总结
Python列表是一个功能强大且灵活的数据结构,掌握它的使用是Python编程的基础。关键要点:
列表在Python中无处不在,从简单的数据存储到复杂的数据处理都离不开它。随着你对Python的深入学习,你会发现列表与其他数据结构(如元组、集合、字典)以及各种库(如NumPy、Pandas)的配合使用,能够解决各种实际问题。
记住:实践是最好的老师!多写代码,多尝试不同的列表操作,你会很快掌握这个强大的工具。

![pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260823004656-6a8a430045592-220x150.png)
![pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260823004339-6a8a423bd3e97-220x150.png)
