Temporary variables in list comprehensions

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sun Jan 8 22:53:26 EST 2017


Suppose you have an expensive calculation that gets used two or more times in a 
loop. The obvious way to avoid calculating it twice in an ordinary loop is with 
a temporary variable:

result = []
for x in data:
    tmp = expensive_calculation(x)
    result.append((tmp, tmp+1))


But what if you are using a list comprehension? Alas, list comps don't let you 
have temporary variables, so you have to write this:


[(expensive_calculation(x), expensive_calculation(x) + 1) for x in data]


Or do you? ... no, you don't!


[(tmp, tmp + 1) for x in data for tmp in [expensive_calculation(x)]]


I can't decide whether that's an awesome trick or a horrible hack...


-- 
Steven
"Ever since I learned about confirmation bias, I've been seeing 
it everywhere." - Jon Ronson



More information about the Python-list mailing list