正在加载...

编号与两条列表配对

for 走的是一条已经备好的序列。它不在每一项旁边放编号,也不把两条列表一起走。enumerate 做前一件事,不另给起点时编号从 0 开始。zip 做后一件事,短的那条用完就停。break 和 continue 是把循环切断。这一页不切断循环。

names 里是 lida,然后 guest。enumerate(names) 每一轮给出一个编号和一个名字。第一个编号是 0,因为没有说别的起点。print 把两个写在同一行。

从 0 给每个名字编号

python
names = ["lida", "guest"]
for number, name in enumerate(names):
    print(number, name)

你会看到 0 lida,然后 1 guest。0 和 1 没有写回 names。names 仍是两个字符串。编号只属于这一轮。

从 1 开始数

把 1 当作第二个参数。enumerate(names, 1) 写出 1 lida,然后 2 guest。名字的顺序不动。动的只是编号。不写第二个参数,就回到 0。

zip 取两条列表,按同样的顺序各取一项。第一个名字是 lida,第一杯是 water。下一轮是 guest 配 tea。这里没有编号,除非你再去调用 enumerate。这段程序没有调用它。

把每个名字配上一杯

python
names = ["lida", "guest"]
drinks = ["water", "tea"]
for name, drink in zip(names, drinks):
    print(name, drink)

你会看到 lida water,然后 guest tea。配对跟着列表的顺序,不看名字的意思。把饮料对调,配对也跟着对调。

较短的列表让循环结束

drinks 里只放 water。zip 仍从两条列表的开头走,所以第一轮是 lida 配 water。没有第二杯。zip 不会补出一杯,也不会报错。guest 根本不会被走到,循环就结束了。

饮料用完就停

python
names = ["lida", "guest"]
drinks = ["water"]
for name, drink in zip(names, drinks):
    print(name, drink)

只有一行:lida water。guest 还在 names 里。旁边没有饮料,所以这个循环没有走到那个名字。

四次调用,各自写出什么。两行 enumerate 只差起点。两行 zip 只差 drinks 的长度。

📊 每次调用写出什么

调用 你看到的
enumerate(names) 0 配 lida,然后 1 配 guest
enumerate(names, 1) 1 配 lida,然后 2 配 guest
zip,drinks 是 water 然后 tea lida 配 water,然后 guest 配 tea
zip,drinks 只有 water lida 配 water,然后循环结束

下一页是函数:一段有名字的工作,以后可以调用。它不给列表编号,也不把两条列表配成对。

先算再运行

  1. names 是 lida,然后 guest。enumerate(names) 写出哪些行?
  2. 你把起点设成 1。第一行是什么?
  3. drinks 是 water,然后 tea。zip 的第二行是什么?
  4. drinks 里只有 water。guest 会被写出来吗?程序会因为错误停下吗?

配对容易错的地方

  • 没有给起点,却指望从 1 开始
  • 以为编号会写回列表里面
  • 因为 tea 看起来合适,就把 lida 配上 tea
  • drinks 只有一项,却还等着 guest
  • 把提前结束当成程序出错

enumerate 走一条列表并加上编号。没有起点时,编号是 0,然后 1:0 配 lida,然后 1 配 guest。传入 1,同样的名字变成 1 和 2。
zip 按同一步走两条列表。长度相同就是 lida 配 water,然后 guest 配 tea。drinks 里只有 water 时,写出 lida water,循环结束。guest 留在 names 里,这个循环到不了它。
下一页给一段工作起名字,好让你去调用。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部