我有一个方法,它接收一个列表并返回一个对象:
# input a list, returns an object
def map_to_obj(lst):
a_list = f(lst)
return a_list[0] if a_list else None
我希望获得一个包含所有映射元素但不为None
的列表。像这样:
v_list = [v1, v2, v3, v4]
[map_to_obj(v) for v in v_list if map_to_obj(v)]
但在列表推导中两次调用map_to_obj
方法似乎不太好。
是否有办法在列表推导中使用局部变量以便获得更好的性能?
或者编译器会自动进行优化吗?
以下是我的期望:
(sml like)
[let mapped = map_to_obj(v) in for v in v_list if mapped end]
map_to_obj(v)
将值0
赋给o
,那么该项将从列表中省略。相反,我建议使用[o for v in [v1, v2, v3, v4] if (o := map_to_obj(v)) is not False]
。 就是这样,零赋值有效。天啊,我花了太长时间才弄明白... - undefined