Как получить количество элементов в разных типах коллекций Python

Сначала будут выведены 10 и 10, затем возникнет TypeError: генератор z не поддерживает len(). Список и множество уже содержат элементы, а генератор ещё только способен их выдавать.

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

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

Сначала будут выведены 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), поэтому при необходимости его лучше хранить отдельно.

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

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

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

Подробнее