Определение присутствия элемента в разных типах коллекций Python

Все три проверки напечатают True. Но поиск в генераторе потребляет его элементы: после нахождения 3 следующий next(z) вернёт 4, тогда как список и множество остаются неизменными.

Короткий ответ

Что ответить на собеседовании

Все три проверки напечатают True. Но поиск в генераторе потребляет его элементы: после нахождения 3 следующий next(z) вернёт 4, тогда как список и множество остаются неизменными.

Подробный разбор

Ответ с пояснениями

Условие

Каким будет вывод программы, представленной ниже?

x = [i for i in range(10)]
y = {i for i in range(10)}
z = (i for i in range(10))

print(3 in x)
print(3 in y)
print(3 in z)

Вопрос проверяет, как оператор in работает со списком, множеством и генератором.

Ответ

Все три проверки напечатают True. Но поиск в генераторе потребляет его элементы: после нахождения 3 следующий next(z) вернёт 4, тогда как список и множество остаются неизменными.

x — список, y — множество, z — ленивый генератор чисел 0–9. Оператор in у списка и генератора последовательно ищет совпадение; множество обычно использует хеш-поиск.

True
True
True

Генератор успевает выдать 0, 1, 2 и 3. Повторная проверка 3 in z пройдёт оставшиеся значения и вернёт False, исчерпав генератор. Поэтому проверки принадлежности одноразовым итераторам имеют побочный эффект изменения позиции обхода.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее