Temporary variables in list comprehensions

Antoon Pardon antoon.pardon at rece.vub.ac.be
Mon Jan 9 08:12:24 EST 2017


Op 09-01-17 om 04:53 schreef Steven D'Aprano:
> 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...

Maybe this in an occasion to use your recipe.
http://code.activestate.com/recipes/580625-collection-pipeline-in-python/
result = data | Map(expensive_calculation) | Map(lambda tmp: (tmp, tmp + 1)) | List
-- 
Antoon.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /