Temporary variables in list comprehensions

Piet van Oostrum piet-l at pietvanoostrum.com
Thu Apr 6 08:25:09 EDT 2017

Steven D'Aprano <steve+comp.lang.python at pearwood.info> writes:

> 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...

It is a poor man's 'let'. It would be nice if python had a real 'let'
construction. Or for example:

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

Piet van Oostrum <piet-l at pietvanoostrum.com>
WWW: http://pietvanoostrum.com/
PGP key: [8DAE142BE17999C4]

More information about the Python-list mailing list