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

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to