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

常用数据结构之列表 1

Blog Author

常用数据结构之列表(一):深入讲解与最佳实践

列表(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 语句;
  • 列表 + 索引访问 = 极简而高效。

学以致用:你能解决下面这些问题吗?

尝试使用列表重构或实现以下场景:

  1. 学生成绩统计:录入多个学生的成绩,计算平均分、最高分。
  2. 闯关游戏:记录每关得分,统计总分和每一关是否及格。
  3. 投票系统:记录每位候选人得票数,输出最高票人选。

结语:列表,让你的程序更强大

列表是处理“多个数据”的第一选择,掌握它,就像给你配上了一把“数据管理的瑞士军刀”。

我们接下来将深入讲解列表的增删改查、嵌套结构与常用方法,让你在实际开发中真正得心应手。记住一句话:

“能用列表解决的问题,就不应该写一堆变量。”


如需继续深入学习,请发送“列表-2”,我会继续带你深入讲解列表的高级操作和应用技巧。