["python","list-comprehension"]
How to set local variable in list comprehension?

I have a method that takes a list and returns an object: # input a list, returns an object def map_to_obj(lst): a_list = f(lst) return a_list[0] if a_list else None I want to get a list that contains all the mapped elements that aren't None. Like this: v_list = [v1, v2, v3, v4] [map_to_obj(v) for v in v_list if map_to_obj(v)] But it doesn't seem good to call the map_to_obj method twice in the list comprehension. Is there a way to have local variables in list comprehensions so that it can have better performance? Or does the compiler optimize it automatically? Here is what I want: (sml like) [let mapped = map_to_obj(v) in for v in v_list if mapped end]
Starting in Python 3.8, and the introduction of assignment expressions (PEP 572) (:= operator), it's possible to use a local variable within a list comprehension in order to avoid calling the same function twice. In our case, we can name the evaluation of map_to_obj(v) as a variable o while using the result of the expression to filter the list; and thus use o as the mapped value: [o for v in [v1, v2, v3, v4] if (o := map_to_obj(v))]