编号与两条列表配对
for 走的是一条已经备好的序列。它不在每一项旁边放编号,也不把两条列表一起走。enumerate 做前一件事,不另给起点时编号从 0 开始。zip 做后一件事,短的那条用完就停。break 和 continue 是把循环切断。这一页不切断循环。
names 里是 lida,然后 guest。enumerate(names) 每一轮给出一个编号和一个名字。第一个编号是 0,因为没有说别的起点。print 把两个写在同一行。
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。这段程序没有调用它。
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 根本不会被走到,循环就结束了。
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,然后循环结束 |
下一页是函数:一段有名字的工作,以后可以调用。它不给列表编号,也不把两条列表配成对。
先算再运行
- names 是 lida,然后 guest。enumerate(names) 写出哪些行?
- 你把起点设成 1。第一行是什么?
- drinks 是 water,然后 tea。zip 的第二行是什么?
- 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 里,这个循环到不了它。
下一页给一段工作起名字,好让你去调用。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部