List comprehension vs generator expression memory allocation

candide candide at free.invalid
Sun Sep 20 15:35:44 CEST 2009

Let's code a function allowing access to the multiples of a given
integer (say m) in the range from a to b where a and b are two given
integers. For instance, with data input

a,b,m=17, 42, 5

the function allows access to :

20 25 30 35 40

Each of the following two functions mult1() and mult2() solves the
question :

# -----------------------------------------
def mult1(a,b,m):
    return (x for x in range(a,b)[(m-a%m)%m:b:m])

def mult2(a,b,m):
    return range(a,b)[(m-a%m)%m:b:m]
# -----------------------------------------

mult2() function returns a list and obviously mult2() needs Python to
allocate memory for this list. What I was wondering is if the same might
be said about mult1(). More precisely, does Python allocate memory for
the whole target list range(a,b)[m-a%m:b:m]?

More information about the Python-list mailing list