Вы обходите список users и хотите, чтобы i был индексом, а u — значением, без использования range(len(users)). Какой вариант подходит лучше всего?
A
for u in users: i = users.index(u): ищет индекс через .index() на каждой итерацииB
for i, u in enumerate(users): print(i, u): enumerate() сразу даёт пару индекс и значениеC
for i in range(len(users)): u = users[i]: ручная работа с длиной и индексами вместо итерацииD
for i, u in zip(users, range(len(users))): print(i, u): индекс и значение перепутаны местамиПравильный ответ.
enumerate() даёт индекс и элемент в одной итерации и не требует ручной работы с длиной и индексами.Разбор
enumerate(users) читабельнее и безопаснее, чем range(len(users)): возвращает пару (индекс, элемент) напрямую. Вариант с users.index(u) даёт неверные индексы при дубликатах и работает за квадратичное время. В варианте с zip(users, range(len(users))) аргументы перепутаны местами — i будет значением, а u — индексом.
Проверь себя · 1/3разбор после ответа
Есть списки пользователей и трат:
users = ['u1', 'u2'] и spends = [100, 200]. После d = {}, в цикле for u, s in zip(users, spends): выполняется d[u] = s. Чему равно d['u2']?Ещё вопросы по теме «Циклы и условия»
- В цепочке условий сверху стоит проверка `amount > 100`, а ниже — `amount > 200` и заключительная ветка. Для значения 250 нужно отдельное поведение, отличающееся от значений в диапазоне от 100 до 200. Что не так с таким порядком проверок?
- Есть словарь выручки по странам `revenue_by_country = {'RU': 100, 'KZ': 50}`. Как корректно посчитать сумму значений через цикл `for`?
- Нужно найти индекс первого отрицательного значения в списке `amounts = [10, 0, -5, 7]`. Выполняется `idx = None`, затем цикл `for i, a in enumerate(amounts):`, и при `if a < 0:` выполняются `idx = i` и `break`. Чему будет равно `idx` после выполнения?
- Есть списки пользователей и трат: `users = ['u1', 'u2']` и `spends = [100, 200]`. После `d = {}`, в цикле `for u, s in zip(users, spends):` выполняется `d[u] = s`. Чему равно `d['u2']`?
- Нужно сегментировать пользователей по `orders_cnt`: 0 → `'new'`, 1–4 → `'low'`, 5+ → `'high'`. Какой порядок условий в цепочке `if`/`elif`/`else` корректный?
- Все вопросы по «Циклы и условия» →