常用数据结构之列表 2
基础教学 1 min read

常用数据结构之列表 2

Blog Author

常用数据结构之列表-2:方法、生成式与应用场景实战


📍 列表的方法(List Methods)

在 Python 中,列表是可变对象(mutable object),意味着你可以动态地添加、删除、查找和排序其中的元素。掌握这些方法,不仅能提升你的代码简洁度,更是实际开发中不可或缺的技能。


🔧 添加和删除元素:增删改查的核心

✅ 添加:append()insert()

languages = ['Python', 'Java', 'C++']
languages.append('JavaScript')      # 追加到末尾
languages.insert(1, 'SQL')          # 插入到指定位置
方法 作用 典型用途
append() 添加到列表末尾 实时记录、增长型数据结构
insert() 插入到指定索引位置 按顺序组织元素、表格插入行等

❌ 删除:remove()pop()clear()del

languages.remove('Java')            # 删除指定元素
temp = languages.pop(1)             # 删除索引位置元素并返回
languages.clear()                   # 清空列表
del languages[0]                    # 删除指定索引元素(更底层)
方法 作用 注意事项
remove(x) 删除第一个等于 x 的元素 若不存在会抛异常,建议先判断再删
pop([i]) 删除索引 i 的元素并返回 若 i 越界抛 IndexError
clear() 清空列表所有元素 相当于重置为空列表
del 关键字删除(不返回值,性能更优) 比如 del lst[3] 删除索引为 3 的元素

🔍 小贴士

lst = ['Python', 'Python', 'Java']
lst.remove('Python')  # 只删除第一个出现的元素

🔍 元素位置与频次:index()count()

items = ['Java', 'Python', 'Python', 'C++']
print(items.index('Python'))          # 输出 1
print(items.count('Python'))          # 输出 2
方法 功能
index(x) 返回第一个等于 x 的元素的索引
count(x) 返回 x 在列表中出现的次数

⚠️ 注意:index() 不存在会抛出 ValueError


🔄 排序与反转:sort()reverse()

items = ['Python', 'Java', 'C++']
items.sort()           # 默认升序排序(原地排序)
items.reverse()        # 反转顺序
方法 作用 注意点
sort() 排序 修改原列表,可指定 reverse=True
reverse() 反转顺序 同样修改原列表

🧠 进阶用法

items.sort(key=len)        # 按元素长度排序
items.sort(key=str.lower)  # 忽略大小写排序

⚡ 列表生成式(List Comprehension)

Python 中的一种高级语法糖,用于快速创建列表,高效、优雅、性能好,推荐日常开发中广泛使用。


🎯 使用场景一:筛选符合条件的数

# 找出1-99之间能被3或5整除的数
items = [i for i in range(1, 100) if i % 3 == 0 or i % 5 == 0]

🎯 使用场景二:映射处理每个元素

nums1 = [35, 12, 97]
nums2 = [num ** 2 for num in nums1]  # 平方

🎯 使用场景三:筛选并保留原始值

nums2 = [num for num in nums1 if num > 50]  # 保留大于50的

📌 为什么推荐?

  • 更简洁:一行胜千行;
  • 更快:底层 LIST_APPENDappend() 更快;
  • 更直观:表达式即逻辑。

🧊 嵌套列表:二维数据的天然结构

列表中的元素也可以是列表,用来表示二维表格或矩阵等结构。

scores = [[95, 83, 92], [80, 75, 82]]
print(scores[0][1])  # 输出第一名学生第二门课成绩:83

📥 从键盘录入生成嵌套列表

scores = []
for _ in range(5):
    scores.append([int(input('请输入成绩: ')) for _ in range(3)])

🎲 随机生成嵌套成绩数据

import random
scores = [[random.randint(60, 100) for _ in range(3)] for _ in range(5)]

📌 实用提示:

场景 示例
表格/学生成绩 scores[学生索引][课程索引]
游戏地图/二维数组操作 map[row][col]
图像像素/颜色通道矩阵 pixels[y][x]

🎰 列表应用案例:双色球号码生成器

✨ 案例目标:

  • 红球从 1\~33 中选出 6 个(不能重复)
  • 蓝球从 1\~16 中选出 1 个

✅ 基础实现

import random


red_balls = list(range(1, 34))
selected_reds = random.sample(red_balls, 6)
selected_reds.sort()
blue_ball = random.choice(range(1, 17))


print('红球:', selected_reds, '蓝球:', blue_ball)

🔁 多注生成

for _ in range(5):
    reds = sorted(random.sample(range(1, 34), 6))
    blue = random.choice(range(1, 17))
    print('红球:', reds, '蓝球:', blue)

🎨 使用 rich 美化输出(终端彩色输出)

pip install rich
from rich.console import Console
from rich.table import Table


console = Console()
table = Table(title="双色球选号")


table.add_column("序号", justify="center")
table.add_column("红球", justify="center")
table.add_column("蓝球", justify="center")


for i in range(5):
    reds = sorted(random.sample(range(1, 34), 6))
    blue = random.choice(range(1, 17))
    table.add_row(
        str(i + 1),
        f"[red]{' '.join(f'{r:02}' for r in reds)}[/red]",
        f"[blue]{blue:02}[/blue]"
    )


console.print(table)

🧠 总结:写列表,就该这样想!

能力 对应方法或技巧 场景
创建列表 [], list(), 生成式 初始数据、变换数据
访问与修改 lst[i], lst[i:j] 精准定位、切片处理
增删元素 append, insert, remove, pop 动态构造/精简列表
查找与统计 index, count 数据定位、频次分析
排序与反转 sort, reverse 数据整合、排序输出
嵌套结构 list of lists 表格、矩阵、二维空间
快速构建与筛选 列表生成式(list comprehension) 数据生成、筛选、变换

学会列表操作,你将拥有处理一切“线性数据结构”的核心武器! 接下来我们将学习列表推导式进阶与函数式编程结合的高级用法,发送 “列表-3” 即可继续!

如需完整练习题、可打印总结表、或代码样例打包下载,请告诉我。