Создайте все кубики, затем выберите те, которые меньше 100.
from itertools import takewhile, count
cubes1to100 = list(takewhile(lambda x: x <= 100, map(lambda x: x**3, count())))
Разбив:
count()
производитбесконечный поток целых чисел 0, 1, 2, .... map(lambda x: x**3, count())
создает бесконечный поток кубов 0, 1, 8, 27, 64, 125, .... takewhile(...)
создает конечный поток кубов, меньший 100, получая только те значения из map
, которые меньше или равны 100. list
, наконец, создает список из повторяемоговозвращается takewhile
.
Все итераторы ленивы, поэтому x ** 3
вычисляется только 6 раз, как и x <= 100
.