Вопрос проверяет понимание протокола итерации и способов работы с объектами, у которых нет доступа по индексу.
Если объект не поддерживает индексирование, его нужно перебирать последовательно. Обычно используют цикл for, функцию next() или инструменты вроде enumerate() и itertools.islice(). Эти методы работают со всеми итерируемыми объектами, независимо от наличия индексов. Такой подход универсален для генераторов, файлов и сетевых потоков.
Некоторые объекты в Python поддерживают только последовательный доступ, а не произвольный.
Определение: Итерируемый объект — объект, у которого можно получить итератор через iter() и последовательно получать элементы через next().
Цикл for
Это стандартный и наиболее читаемый способ:
for item in iterable:
print(item)
Использование next()
Позволяет вручную получать элементы:
it = iter(iterable)
print(next(it))
print(next(it))
Получение индекса через enumerate()
Если нужен номер элемента:
for i, value in enumerate(iterable):
print(i, value)
Получение части последовательности
Если нужен, например, 5-й элемент:
from itertools import islice
value = next(islice(iterable, 4, None))
генераторы;
файлы (for line in file);
сетевые потоки и стримы;
большие наборы данных, которые не загружаются целиком.
Если объект не поддерживает индексирование, нужно использовать последовательную итерацию через for, next(), enumerate() или инструменты из itertools.