Все три проверки напечатают True. Но поиск в генераторе потребляет его элементы: после нахождения 3 следующий next(z) вернёт 4, тогда как список и множество остаются неизменными.
Определение присутствия элемента в разных типах коллекций Python
Все три проверки напечатают 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, исчерпав генератор. Поэтому проверки принадлежности одноразовым итераторам имеют побочный эффект изменения позиции обхода.