小白python入门 - 8. Python 列表 ——从线性存储到智能集合的范式跃迁
·
一、问题引入:为什么需要列表?
场景:掷色子6000次,统计各点数出现次数。
初学者解法(繁琐低效):
f1 = 0 # 统计1点次数
f2 = 0 # 统计2点次数
... # 需定义6个变量和6个if分支
痛点分析:
- 变量爆炸:每增加一个色子需多定义6个变量(如掷2个色子需36个变量)
- 代码重复:大量雷同的
if分支(如掷3个色子需216个分支!) - 维护困难:修改逻辑需重复操作多次
生活类比:
想象统计全班50人的成绩:若用50个变量score1、score2…会疯掉!而列表就像一张成绩单表格,所有数据整齐排列在一张纸上。
二、列表是什么?—— 数据的集装箱
定义:列表(List)是能存放多个元素的有序容器,像火车车厢一样顺序排列。
核心优势:一个变量管理大量数据!
创建列表的两种方式:
1. 直接列元素(推荐初学者):
# 示例1:存整数(如学生年龄)
ages = [18, 19, 20, 17]
# 示例2:存字符串(如购物清单)
shopping_list = ["苹果", "牛奶", "面包"]
# 示例3:混合类型(尽量避免)
mixed = [1, "Python", True] # 可行但不推荐
2. 用list()转换生成:
# 生成1~9的整数列表(如抽奖号码池)
numbers = list(range(1, 10)) # 结果:[1,2,3,4,5,6,7,8,9]
# 字符串转列表(如拆分单词)
chars = list("hello") # 结果:['h','e','l','l','o']
命名技巧:
列表变量名用复数形式,如scores(非score)、students(非student),一眼看出存多个值。
三、列表操作:增删查改的四大技能
技能1:拼接与重复(像乐高积木组合)
拼接两个列表(如合并两个班级名单)
class1 = ["小明", "小红"]
class2 = ["小刚", "小美"]
combined = class1 + class2 # ["小明","小红","小刚","小美"]
重复列表(如生成多份相同试卷)
papers = ["试卷A"] * 3 # ["试卷A","试卷A","试卷A"]
技能2:成员检查(快速查找元素)
fruits = ["苹果", "香蕉", "橙子"]
检查"香蕉"是否在列表中
print("香蕉" in fruits) # 输出:True
检查"西瓜"是否不在列表中
print("西瓜" not in fruits) # 输出:True
技能3:索引与切片(精准定位数据)
-
索引:像储物柜编号,从0开始计数
# 正向索引(从左到右) colors = ["红", "绿", "蓝"] print(colors[0]) # 输出:"红"(第1个元素) print(colors[2]) # 输出:"蓝"(第3个元素) # 反向索引(从右到左) print(colors[-1]) # 输出:"蓝"(最后1个元素) print(colors[-3]) # 输出:"红"(第1个元素) -
切片:像切蛋糕,取子列表
numbers = [0,1,2,3,4,5] print(numbers[1:4]) # 输出:[1,2,3](取索引1到3) print(numbers[::2]) # 输出:[0,2,4](隔1个取1个) print(numbers[::-1]) # 输出:[5,4,3,2,1,0](反转列表)
技能4:遍历元素(批量处理数据)
方法1:直接遍历元素(推荐!)
示例:打印购物清单
items = ["笔记本", "铅笔", "橡皮"]
for item in items:
print("需购买:" + item)
方法2:通过索引遍历
示例:给学生编号
students = ["张三", "李四", "王五"]
for i in range(len(students)):
print(f"学号{i+1}: {students[i]}")
四、实战:用列表重构掷色子程序
原始代码问题:6个变量+6个if分支 → 24行代码
列表优化后:1个列表+1个循环 → 8行代码!
import random
初始化计数器:列表[0,0,0,0,0,0]代表6个点数
counters = [0] * 6
掷色子6000次
for _ in range(6000):
face = random.randint(1, 6) # 生成1~6随机数
counters[face-1] += 1 # 对应点数计数+1
打印结果
for i in range(6):
print(f"{i+1}点出现了{counters[i]}次")
优势对比:
| 指标 | 原始方案 | 列表方案 |
|---|---|---|
| 变量数量 | 6个 | 1个 |
| 分支语句 | 6个if |
0个 |
| 扩展性 | 加1色子代码翻倍 | 加色子只需改1行 |
五、深度延伸:列表的进阶应用
1. 列表推导式——高效生成列表
用一行代码生成复杂列表,替代多行循环
示例:生成1~10的平方列表
squares = [x2 for x in range(1,11)] # [1,4,9,...,100]
示例:筛选偶数
evens = [x for x in range(20) if x%2==0] # [0,2,4,...,18]
2. 多维列表——处理表格数据
列表嵌套实现二维结构(如棋盘、Excel表格)
创建3x3井字棋棋盘
board = [
[" ", " ", " "], # 第1行
[" ", "X", " "], # 第2行
["O", " ", " "] # 第3行
]
访问第二行第一列
print(board[1][0]) # 输出:" "
3. 列表与算法效率
- 优势:动态扩容(随时增删元素)
- 注意:
- 索引访问:极快(时间复杂度O(1))
- 查找元素:较慢(需遍历,O(n))→ 若需快速查找,后续学字典(dict)
- 大型数据:考虑NumPy数组(更节省内存)
4. 与其他数据结构对比
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 列表(list) | 有序、可修改 | 数据顺序重要时(如日志) |
| 元组(tuple) | 有序、不可修改 | 存储常量(如坐标) |
| 集合(set) | 无序、不重复 | 去重(如统计词汇) |
| 字典(dict) | 键值对、快速查找 | 存储属性(如学生信息) |
六、总结:为什么列表是Python核心?
- 简化代码:1个变量代替多个变量,循环代替重复分支
- 提升可读性:
counters[face-1]比f1/f2更直观 - 赋能复杂应用:从游戏开发(存储玩家道具)到数据分析(处理数据集)
初学者行动建议:
- 将日常数据列表化(如待办事项、电影收藏)
- 尝试用列表推导式重构旧代码
- 进阶探索:用列表实现排序算法(如冒泡排序)
列表是Python编程的“瑞士军刀”——掌握它,你就打开了高效处理数据的大门!接下来可探索字典管理键值数据,或NumPy处理科学计算。
更多推荐
所有评论(0)