“适合人群:编程新手、想系统学习 Python 数据结构的读者
阅读时间:8 分钟
一、什么是列表(List)?
列表是 Python 中最常用的数据结构之一,它是一个有序、可变的元素集合。
你可以把列表想象成一个智能收纳盒:
# 创建一个空列表
empty_list = []
# 创建一个包含多种类型数据的列表
my_list = [1, "hello", 3.14, True]
二、创建列表的 4 种方式
1. 直接创建(最常用)
fruits = ["苹果", "香蕉", "橙子"]
numbers = [10, 20, 30, 40, 50]
2. 使用 list() 函数
# 将字符串拆分成字符列表
chars = list("Python") # ['P', 'y', 't', 'h', 'o', 'n']
# 将元组转为列表
tuple_data = (1, 2, 3)
list_data = list(tuple_data) # [1, 2, 3]
3. 列表推导式(高效简洁)
# 生成 1-10 的平方数
squares = [x**2for x in range(1, 11)]
# 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 筛选偶数
evens = [x for x in range(10) if x % 2 == 0]
# 结果:[0, 2, 4, 6, 8]
4. 重复创建
zeros = [0] * 5# [0, 0, 0, 0, 0]
stars = ["★"] * 3# ['★', '★', '★']
三、列表的核心操作
📍 访问元素(索引)
colors = ["红", "橙", "黄", "绿", "蓝"]
# 正向索引(从0开始)
print(colors[0]) # 红
print(colors[2]) # 黄
# 反向索引(从-1开始,倒数)
print(colors[-1]) # 蓝
print(colors[-2]) # 绿
📍 切片(截取部分)
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 基本切片 [start:end](end不包含)
print(numbers[2:5]) # [2, 3, 4]
# 从头或到尾省略
print(numbers[:3]) # [0, 1, 2] 前3个
print(numbers[7:]) # [7, 8, 9] 第7个之后
# 带步长 [start:end:step]
print(numbers[::2]) # [0, 2, 4, 6, 8] 每隔一个取
print(numbers[::-1]) # [9, 8, 7, ..., 0] 反转列表!
📍 增删改查
| | |
|---|
| 添加 | append() | list.append("新元素") |
| 添加 | extend() | list.extend([4,5]) |
| 插入 | insert() | list.insert(1, "插入") |
| 删除 | remove() | list.remove("香蕉") |
| 删除 | pop() | list.pop(2) |
| 清空 | clear() | list.clear() |
todo = ["买菜", "做饭"]
# 添加任务
todo.append("洗碗") # ['买菜', '做饭', '洗碗']
todo.insert(0, "起床") # ['起床', '买菜', '做饭', '洗碗']
# 删除任务
todo.remove("做饭") # ['起床', '买菜', '洗碗']
finished = todo.pop() # finished='洗碗', todo=['起床', '买菜']
四、列表的实用方法
scores = [85, 92, 78, 92, 88]
# 统计与查找
print(len(scores)) # 5 (元素个数)
print(scores.count(92)) # 2 (92出现几次)
print(scores.index(78)) # 2 (78在哪个位置)
# 排序
scores.sort() # 升序 [78, 85, 88, 92, 92]
scores.sort(reverse=True) # 降序 [92, 92, 88, 85, 78]
# 反转
scores.reverse() # 原地反转
# 复制(避免引用问题)
new_scores = scores.copy()
“⚠️ 重要提示:sort() 会修改原列表,若想保留原列表,用 sorted(scores)。
五、实战案例
案例 1:成绩统计系统
scores = [85, 92, 78, 96, 88, 74, 91]
# 计算平均分
average = sum(scores) / len(scores)
print(f"平均分:{average:.1f}") # 平均分:86.3
# 找出最高分和最低分
print(f"最高分:{max(scores)}") # 最高分:96
print(f"最低分:{min(scores)}") # 最低分:74
# 筛选优秀成绩(≥90分)
excellent = [s for s in scores if s >= 90]
print(f"优秀人数:{len(excellent)}人") # 优秀人数:3人
案例 2:购物车价格计算
cart = [
{"name": "牛奶", "price": 12.5},
{"name": "面包", "price": 8.0},
{"name": "鸡蛋", "price": 15.8}
]
# 计算总价
total = sum(item["price"] for item in cart)
print(f"购物车总价:¥{total:.2f}") # 购物车总价:¥36.30
# 找出最贵的商品
most_expensive = max(cart, key=lambda x: x["price"])
print(f"最贵的是:{most_expensive['name']}") # 最贵的是:鸡蛋
案例 3:数据去重与合并
# 两个班级的学生名单
class_a = ["张三", "李四", "王五"]
class_b = ["李四", "赵六", "孙七"]
# 合并并去重
all_students = list(set(class_a + class_b))
print(all_students) # ['张三', '孙七', '王五', '赵六', '李四']
# 找共同学生(交集)
common = [s for s in class_a if s in class_b]
print(f"两个班都有的学生:{common}") # ['李四']
六、常见坑与避坑指南
❌ 坑 1:赋值 ≠ 复制
a = [1, 2, 3]
b = a # 这是引用,不是复制!
b.append(4)
print(a) # [1, 2, 3, 4] ← a也被改了!
# ✅ 正确做法
b = a.copy() # 或 b = a[:]
❌ 坑 2:循环中删除元素
# 错误示范:会跳过元素或报错
for item in my_list:
if item == "删除我":
my_list.remove(item)
# ✅ 正确做法:倒序删除或构建新列表
for i in range(len(my_list) - 1, -1, -1):
if my_list[i] == "删除我":
my_list.pop(i)
❌ 坑 3:索引越界
lst = [1, 2, 3]
print(lst[5]) # IndexError!
# ✅ 安全访问
index = 5
if index < len(lst):
print(lst[index])
else:
print("索引超出范围")
七、一张图记住列表操作
列表 = [元素0, 元素1, 元素2, ... 元素n-1]
↑ ↑ ↑
lst[0] lst[1] lst[-1]
常用操作速查:
增:append / extend / insert
删:remove / pop / clear
查:index / count / in
排:sort / sorted / reverse
切:[start:end:step]
八、今日练习
试着完成下面这个小挑战:
“有一个列表 nums = [3, 1, 4, 1, 5, 9, 2, 6],请:
点击查看答案nums = [3, 1, 4, 1, 5, 9, 2, 6]
# 去重 → 排序 → 取前3
unique_sorted = sorted(set(nums), reverse=True)[:3]
print(unique_sorted) # [9, 6, 5]
# 计算乘积
result = 1
for n in unique_sorted:
result *= n
print(result) # 270
总结
列表是 Python 编程的基石,掌握它,你就已经迈出了数据处理的第一步!
“💡 下期预告:Python 字典(Dict)——用"键值对"管理你的数据
如果这篇文章对你有帮助,欢迎点赞、收藏、转发给更多朋友!在评论区留下你的问题,我会一一解答。