Czy możliwe jest dodanie klauzuli where ze zrozumieniem listy?
Rozważmy następujące rozumienie listy
[ (x,f(x)) for x in iterable if f(x) ]
To filtruje warunek iterowalnyf
i zwraca paryx,f(x)
. Problem z tym podejściemf(x)
jest obliczany dwukrotnie. Byłoby wspaniale, gdybyśmy mogli pisać tak
[ (x,fx) for x in iterable if fx where fx = f(x) ]
or
[ (x,fx) for x in iterable if fx with f(x) as fx ]
Ale w pythonie musimy pisać za pomocą zagnieżdżonych wyrażeń, aby uniknąć powielania wywołań f (x) i sprawia to, że zrozumienie wygląda mniej jasno
[ (x,fx) for x,fx in ( (y,f(y) for y in iterable ) if fx ]
Czy jest jakiś inny sposób na uczynienie go bardziej pytonicznym i czytelnym?
Aktualizacja
Wkrótce w Pythonie 3.8!WERWA
# Share a subexpression between a comprehension filter clause and its output
filtered_data = [y for x in data if (y := f(x)) is not None]