这节课你要学会

1. 用列表一次装一堆东西;2. 按编号取出和修改;3. 添加和删除;4. 列表和 for 循环联手——这对黄金搭档后面天天用。

一串东西装进一个盒子

之前每个盒子只能装一样东西:name = "小明"。可是想装全班同学的名字呢?开 40 个盒子太傻了。用列表——把一串东西装进同一个盒子,用方括号 [],中间用逗号隔开:

friends = ["小明", "小红", "小刚", "小雨"]
print(friends)
print(len(friends))   # len = 长度,数数有几个
运行结果
['小明', '小红', '小刚', '小雨']
4

len()(读作"len")能数出列表里有几个东西,就像点货。

按编号取东西

列表里的每个东西都有自己的编号。喊编号就能取出来:

friends = ["小明", "小红", "小刚", "小雨"]
print(friends[0])
print(friends[1])
print(friends[3])
运行结果
小明
小红
小雨

又是从 0 开始!

第五课的 range 你已经领教过了:列表的编号也从 0 开始。第 1 个是 [0],第 2 个是 [1],第 4 个是 [3]。所以 4 个朋友的最后一个编号是 3。如果喊 friends[4],电脑会说" IndexError:没有这个东西"。

编号不光能取,还能

friends[0] = "大明"   # 小明长大了,改叫大明
print(friends[0])

往百宝袋里加东西、扔东西

backpack = ["红宝石", "地图"]
backpack.append("魔法药水")   # 捡到宝物,装进袋子
print(backpack)
backpack.remove("红宝石")     # 用来开锁了,扔掉
print(backpack)
运行结果
['红宝石', '地图', '魔法药水']
['地图', '魔法药水']

点号的意思:"某某的某个本领"

backpack.append(...) 读作"backpack 的 append 本领"。列表这种盒子自带几个本领:append 是"装进去",remove 是"扔出去",len() 是数数。游戏里主角的背包、购物清单、歌单,全都是列表。

列表 + for 循环:黄金搭档

还记得第五课说 for 是"对每一遍"吗?它真正的意思是"对列表里的每一个东西":

friends = ["小明", "小红", "小刚", "小雨"]
for f in friends:
    print(f"{f},周末来我家玩!")
运行结果
小明,周末来我家玩!
小红,周末来我家玩!
小刚,周末来我家玩!
小雨,周末来我家玩!

for 每转一圈,就把列表里的一个东西放进 f 盒子里。四个人,转四圈,一个都不落。以后装 40 个人也一样,就两行代码。

数字列表的三个好用的本领

scores = [92, 85, 78, 95, 88]
print(sum(scores))   # 总和
print(max(scores))   # 最高
print(min(scores))   # 最低
运行结果
438
95
78

总和除以个数就是平均分:sum(scores) / len(scores)——老师算全班平均分,原来这么简单。

随机点名器

把第七课的 random 和列表合体,课堂点名神器:

import random

students = ["小明", "小红", "小刚", "小雨", "小天"]
lucky = random.choice(students)   # 从列表里随机抽一个
print(f"🎉 被点到的同学是:{lucky}!")

动手试一试:我的书单管理器

books = ["哈利波特", "西游记"]
reading = True

while reading:
    print("===== 我的书单 =====")
    print(books)
    action = input("输入 add 添加 / del 删除 / quit 退出:")
    if action == "add":
        new = input("书名?")
        books.append(new)
        print(f"《{new}》加入书单!")
    elif action == "del":
        old = input("删哪本?")
        books.remove(old)
        print(f"《{old}》已读完,删除!")
    else:
        reading = False

print(f"再见!你一共有 {len(books)} 本书要读。")

这就是一个能一直用下去的小软件!while 开关 + if 分流 + 列表增删,三个老朋友联手,做出来的东西"像真的"。

练习

基础任务:水果盘点。建一个装 5 种水果的列表,打印第 1 种和最后一种(提示:最后一种的编号是 len(fruits) - 1,或者试试 fruits[-1]),再用 for 打印"我最爱吃某某"。

进阶任务:全班平均分。建一个装 6 个分数的列表,算出平均分和最高分,再打印"最高分 95,平均分 88.5,超过平均分的有 3 人"。(最后这半句要用 if 数一数,在循环里数!想想第五课的记账本)

隐藏挑战:抽卡模拟器。做一个"十连抽":金卡概率 10%,紫卡 30%,蓝卡 60%。抽 10 次并列出结果,最后统计每种卡各有几张。(提示:random.randint(1, 100),小于等于 10 出金卡……统计用三个记账本变量)

接下来

你已经掌握了几乎所有核心零件!下一课学最后一个大件:函数——把一段代码打包起来,起个名字,想用就用。学完它,你就能做大程序了。