第四章 · 数据结构

列表

本节目标

学完这一节,你会知道:

  1. 列表是什么,适合保存什么数据
  2. 如何用索引和切片访问列表元素
  3. 如何增加、修改、删除列表元素
  4. 如何排序、统计和遍历列表
  5. 如何写一个简单的任务清单程序

列表是 Python 里最常用的数据结构。只要你要保存“一组东西”,第一反应通常就是列表。

先跑一个例子

新建文件 list_demo.py,写入:

tasks = ["学习变量", "练习循环", "整理笔记"]

tasks.append("完成小练习")
tasks[1] = "练习 for 循环"

print("今日任务:")
for i, task in enumerate(tasks, start=1):
    print(f"{i}. {task}")

运行:

python3 list_demo.py

你会看到:

今日任务:
1. 学习变量
2. 练习 for 循环
3. 整理笔记
4. 完成小练习

这里用列表保存多个任务,用 append() 增加任务,用索引修改任务。

什么是列表?

列表用来保存一组有顺序的数据。

fruits = ["苹果", "香蕉", "橙子"]
scores = [85, 92, 78]
mixed = ["小明", 18, True]

列表特点:

  • 有顺序
  • 可以重复
  • 可以修改
  • 可以保存多个值

虽然列表可以混合保存不同类型,但实际写代码时,通常让一个列表保存同一类数据。

索引和切片

列表索引从 0 开始。

fruits = ["苹果", "香蕉", "橙子", "葡萄"]

print(fruits[0])
print(fruits[1])
print(fruits[-1])

输出:

苹果
香蕉
葡萄

切片可以取出一段:

print(fruits[1:3])
print(fruits[:2])
print(fruits[2:])

输出:

['香蕉', '橙子']
['苹果', '香蕉']
['橙子', '葡萄']

注意:切片结束位置不包含在结果里。

修改列表

按索引修改:

colors = ["红", "绿", "蓝"]

colors[0] = "红色"

print(colors)

输出:

['红色', '绿', '蓝']

也可以用切片修改多个元素:

colors[1:] = ["绿色", "蓝色"]
print(colors)

增加元素

最常用的是 append()

tasks = ["学习变量"]
tasks.append("学习列表")

print(tasks)

指定位置插入用 insert()

tasks.insert(0, "打开电脑")

一次追加多个元素用 extend()

tasks.extend(["复习", "做练习"])

删除元素

删除最后一个元素:

tasks = ["学习", "练习", "休息"]
last = tasks.pop()

print(last)
print(tasks)

按索引删除:

tasks.pop(0)

按值删除:

tasks.remove("练习")

清空列表:

tasks.clear()

遍历列表

直接遍历:

fruits = ["苹果", "香蕉", "橙子"]

for fruit in fruits:
    print(fruit)

带序号遍历:

for i, fruit in enumerate(fruits, start=1):
    print(f"{i}. {fruit}")

enumerate() 很适合打印清单。

排序和统计

scores = [85, 92, 78, 92, 60]

print(len(scores))
print(max(scores))
print(min(scores))
print(sum(scores))
print(scores.count(92))

排序:

scores.sort()
print(scores)

scores.sort(reverse=True)
print(scores)

sort() 会修改原列表。

如果不想修改原列表,用 sorted()

original = [3, 1, 2]
new_list = sorted(original)

print(original)
print(new_list)

了解即可:列表推导式

列表推导式可以用一行代码生成列表。

squares = [i ** 2 for i in range(1, 6)]
print(squares)

输出:

[1, 4, 9, 16, 25]

带条件:

evens = [i for i in range(1, 11) if i % 2 == 0]
print(evens)

推导式后面还有专门一节会详细讲。

逐行拆解

再看开头的任务清单:

tasks = ["学习变量", "练习循环", "整理笔记"]

创建一个任务列表。

tasks.append("完成小练习")

在列表末尾增加一个任务。

tasks[1] = "练习 for 循环"

修改索引为 1 的任务,也就是第二个任务。

for i, task in enumerate(tasks, start=1):

遍历任务,同时拿到从 1 开始的编号。

自己改一改

list_demo.py 改成购物清单:

items = ["苹果", "牛奶", "面包"]

items.append("鸡蛋")
items.remove("牛奶")

print("购物清单:")
for i, item in enumerate(items, start=1):
    print(f"{i}. {item}")

然后继续改:

  1. 插入一个商品到第一位
  2. 修改最后一个商品
  3. 输出清单里一共有多少个商品

常见错误

1. 索引超出范围

fruits = ["苹果", "香蕉"]
print(fruits[5])

这会报 IndexError

2. remove 删除不存在的元素

fruits = ["苹果", "香蕉"]
fruits.remove("葡萄")

这会报 ValueError。可以先判断:

if "葡萄" in fruits:
    fruits.remove("葡萄")

3. 混淆 append 和 extend

items = ["a"]
items.append(["b", "c"])
print(items)

结果是:

['a', ['b', 'c']]

如果想追加多个元素,用 extend()

items.extend(["b", "c"])

4. 修改遍历中的列表

一边遍历一边删除元素,容易漏掉数据。刚入门时,建议先创建新列表,或者遍历列表副本。

小练习

练习 1:成绩统计

给定:

scores = [85, 92, 78, 90, 66]

输出最高分、最低分、平均分。

练习 2:任务清单

创建一个任务列表,至少包含 3 个任务。完成以下操作:

  1. 增加一个任务
  2. 删除一个任务
  3. 打印带编号的任务清单

练习 3:筛选偶数

给定数字列表,筛选出所有偶数,保存到新列表。

参考答案

练习 1:

scores = [85, 92, 78, 90, 66]
average = sum(scores) / len(scores)

print(f"最高分:{max(scores)}")
print(f"最低分:{min(scores)}")
print(f"平均分:{average:.1f}")

练习 2:

tasks = ["读书", "写代码", "运动"]

tasks.append("复盘")
tasks.remove("运动")

for i, task in enumerate(tasks, start=1):
    print(f"{i}. {task}")

练习 3:

numbers = [1, 2, 3, 4, 5, 6]
evens = []

for number in numbers:
    if number % 2 == 0:
        evens.append(number)

print(evens)

小结

这一节你学会了:

  1. 列表可以保存一组有顺序的数据
  2. 索引和切片可以访问列表元素
  3. append()insert()extend() 可以增加元素
  4. pop()remove()clear() 可以删除元素
  5. sort()sorted()len()sum() 等常用于排序和统计

下一节我们会学习元组与集合。它们和列表很像,但分别适合“保护数据”和“去重分析”。

列表是你的第一个数据收纳箱

任务、成绩、水果、商品,都可以先放进列表里排排坐。索引从 0 开始这件事,刚开始谁都会数错,马哥也建议你多 print 看看。会增删改查之后,你就能管理一小批数据了。

讨论 (0)

还没有评论,来抢沙发吧!