Temporary variables in list comprehensions
jmp
jeanmichel at sequans.com
Tue Jan 10 05:35:31 EST 2017
On 01/09/2017 04:53 AM, Steven D'Aprano wrote:
> 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...
In any situation, the double list comprehension (also used to flatten
lists) is very difficult to read.
What about
for x in (f(d) for d in data):
result.append(x, x+1)
There's a double for loop in the same line but the generator parenthesis
help a lot. No lame tmp variable involved.
JM
More information about the Python-list
mailing list