Как работает этот код? Python, iter, next

Рейтинг: 0Ответов: 1Опубликовано: 16.01.2023

Такой код:

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". Но он выводит всё правильно. Я не понимаю логику того, как это происходит...

Ответы

▲ 0

Итератор - специальный объект. Каждый раз когда вы применяете к нему 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