常用数据结构之列表 1
常用数据结构之列表(一):深入讲解与最佳实践
列表(List)是 Python 中最基本也最常用的数据结构之一,它能帮助我们方便、灵活地处理多个数据。通过本节课的学习,你将不仅掌握列表的语法,还能真正理解列表的使用场景、思维方式,并通过实战学会高效地组织和处理数据。
为什么要引入列表:从掷色子问题说起
🧩 场景引入
在程序中经常会遇到需要存储多个数据的场景。比如掷骰子 6000 次并统计每种点数的出现次数,最初我们可能会用多个变量:
f1, f2, f3, f4, f5, f6 = 0, 0, 0, 0, 0, 0
但如果改为掷两颗、五颗骰子呢?你要定义更多变量、写更多判断?显然非常不优雅,而且不具备可扩展性。
这时候,列表就能帮你优雅地解决问题。
创建列表:装多个值的“容器”
✅ 列表的语法
nums = [1, 2, 3, 4, 5]
words = ['Python', 'Java']
mixed = [1, 'a', True, 3.14]
最佳实践:尽量保证列表中数据类型一致(同为数字、同为字符串),有利于后续统一处理。
✅ 使用构造器 list()
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list('hello')) # ['h', 'e', 'l', 'l', 'o']
使用场景:当你想将“可迭代对象”(字符串、range)转换成列表时非常方便。
列表的常用操作:拼接、重复与成员测试
➕ 拼接 +
print([1, 2] + [3, 4]) # [1, 2, 3, 4]
用途:组合两个列表,常用于数据合并、批量添加元素。
✖️ 重复 *
print([0] * 5) # [0, 0, 0, 0, 0]
用途:快速生成固定格式的初始数据,如计数器、占位列表。
🔍 判断成员 in
/ not in
print(2 in [1, 2, 3]) # True
print('C++' not in ['Java']) # True
用途:数据筛选、判断用户输入是否在候选值中。
列表的索引和切片:精准定位与批量操作
📌 正向/反向索引
fruits = ['apple', 'banana', 'cherry']
print(fruits[0]) # apple
print(fruits[-1]) # cherry
说明:
[0]
是第一个元素,[-1]
是最后一个,适用于访问尾部元素无需知道长度。
✂️ 切片访问多个元素
print(fruits[0:2]) # ['apple', 'banana']
print(fruits[-2:]) # ['banana', 'cherry']
切片语法
list[start:end:step]
start
起始索引(包含)end
结束索引(不含)step
步长(默认是 1)
用途:批量选取元素,特别适合在数据清洗、文本处理时提取部分字段。
🛠 切片修改
fruits[1:3] = ['blueberry', 'kiwi']
应用场景:批量替换列表中的一段内容。
列表的比较运算:相等与大小判断
print([1, 2, 3] == [1, 2, 3]) # True
print([1, 2, 3] < [2, 0, 0]) # True
实战意义:列表的大小比较一般用于排序、版本号比较(如
[1, 0, 3]
<[1, 1, 0]
)
列表的遍历:访问每一个元素的两种方式
方法一:按索引访问(适合需要索引的场景)
for i in range(len(fruits)):
print(i, fruits[i])
场景:需要知道每个元素的位置,比如打印编号、修改原始列表。
方法二:直接访问元素
for fruit in fruits:
print(fruit)
场景:只关心元素本身即可,代码更简洁。
实战优化:掷色子统计问题的优雅解法
✅ 优雅写法
import random
counters = [0] * 6
for _ in range(6000):
face = random.randint(1, 6)
counters[face - 1] += 1
for i in range(6):
print(f'{i + 1}点出现了{counters[i]}次')
👍 最佳实践总结
counters = [0] * 6
:快速创建一个计数器列表;face - 1
:用点数-1 作为索引,避免大量 if 语句;- 列表 + 索引访问 = 极简而高效。
学以致用:你能解决下面这些问题吗?
尝试使用列表重构或实现以下场景:
- 学生成绩统计:录入多个学生的成绩,计算平均分、最高分。
- 闯关游戏:记录每关得分,统计总分和每一关是否及格。
- 投票系统:记录每位候选人得票数,输出最高票人选。
结语:列表,让你的程序更强大
列表是处理“多个数据”的第一选择,掌握它,就像给你配上了一把“数据管理的瑞士军刀”。
我们接下来将深入讲解列表的增删改查、嵌套结构与常用方法,让你在实际开发中真正得心应手。记住一句话:
“能用列表解决的问题,就不应该写一堆变量。”
如需继续深入学习,请发送“列表-2”,我会继续带你深入讲解列表的高级操作和应用技巧。