Как работает этот код? Python, iter, next
Такой код:
data = [5, 3, 2, 8, 1, 4]
odds = iter(sorted(el for el in data if el % 2))
print([next(odds) if el % 2 else el for el in data])
Он сортирует нечетные числа в списке, оставляя на месте четные.
Я посмотрел видео и почитал документацию про iter и next. Iter - создает итерируемый объект, next - берет элементы этого объекта и выводит следующий при каждом новом вызове.
А здесь выводятся сразу все объекты. Я бы от такого кода ожидал либо "1", либо "5". Но он выводит всё правильно. Я не понимаю логику того, как это происходит...
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Итератор - специальный объект. Каждый раз когда вы применяете к нему next он отдаёт следующее число. Пока они не кончатся:
data = [5, 3, 2, 8, 1, 4]
odds = iter(sorted(el for el in data if el % 2))
print(next(odds))
print(next(odds))
print(next(odds))
print(next(odds))
$ python show-odds.py 1 3 5 Traceback (most recent call last): File "show-odds.py", line 7, in <module> print(next(odds)) StopIteration