Сначала будут выведены 10 и 10, затем возникнет TypeError: генератор z не поддерживает len(). Список и множество уже содержат элементы, а генератор ещё только способен их выдавать.
Как получить количество элементов в разных типах коллекций Python
Сначала будут выведены 10 и 10, затем возникнет TypeError: генератор z не поддерживает len(). Список и множество уже содержат элементы, а генератор ещё только способен их выдавать.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что покажет вывод программы при запуске следующего кода:
x = [i for i in range(10)]
y = {i for i in range(10)}
z = (i for i in range(10))
print(len(x))
print(len(y))
print(len(z))
Ответ
Сначала будут выведены 10 и 10, затем возникнет TypeError: генератор z не поддерживает len(). Список и множество уже содержат элементы, а генератор ещё только способен их выдавать.
x создаётся списковым включением, y — множеством из десяти разных чисел, z — генераторным выражением. Чтобы посчитать элементы произвольного конечного генератора, можно выполнить sum(1 for _ in z), но это исчерпает его. Преобразование в list тоже потребит генератор и выделит память. Здесь количество известно из range(10), поэтому при необходимости его лучше хранить отдельно.