Номер элемента и пара списков
zip берёт первый элемент каждого списка вместе, потом второй, и останавливается, когда короткий список кончился. enumerate ставит номер рядом с именем. Если другого начала нет, номер равен 0. for шёл по одному готовому ряду. 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. Ноль и единица не записаны внутрь 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, хотя начало не передано
- Думать, что номер записывается обратно в список
- Ставить lida с tea, потому что tea кажется подходящим
- Ждать guest, когда в drinks один элемент
- Принимать ранний конец за сбой
enumerate идёт по одному списку и добавляет номер. Без начала номер 0, затем 1: 0 с lida, затем 1 с guest. Передайте 1, и те же имена выйдут как 1 и 2.
zip идёт по двум спискам в одном шаге. Равная длина даёт lida с water, затем guest с tea. Если в drinks только water, пишется lida water и цикл кончается. guest остаётся в names, этот цикл до него не доходит.
Следующая страница даёт работе имя, чтобы вы могли её вызвать.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху