Optimizing Complex Generator Expressions
Need a quick rundown on optimizing complex generator expressions? Look no further!
Join the DZone community and get the full member experience.Join For Free
The core expression is similar to this:
y = (f(x) for x in L if f(x) is not None)
There are a lot of variations on the filter. The point is that the function appears twice in the above expression.
We have a number of alternatives.
y = filter(None, f(x) for x in L)
y = filter(None, map(f, L))
y = (x for x in (f(y) for y in L) if x is not None)
My preference is two steps, even though I don't really have a good reason for this.
y2 = (f for f in y1 if f)
y = (f(x) as val for x in L if val is not None)
The as clause binds the f(x) to val so that it can be used in the if clause.
Published at DZone with permission of Steven Lott, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.