Python 计算量大的列表理解
因此,我有一些列表理解,如下所示Python 计算量大的列表理解,python,list-comprehension,Python,List Comprehension,因此,我有一些列表理解,如下所示 li = [some_computation(x) for x in y if some_computation(x)] 在这里,我只想要关于某些计算的真实值 这个计算是否是列表理解所显示的两倍?如果某些计算很昂贵,我真的不想要这个。(我觉得可能是这样的:() 有没有更好的方法来实现这一点?如果只有一些计算(x),也许可以将其分解为一个常规for循环并附加,但我喜欢理解 某些_计算将计算两次,为了避免这种情况,您可以使用过滤器放弃错误结果: li = list
li = [some_computation(x) for x in y if some_computation(x)]
在这里,我只想要关于某些计算的真实值
这个计算是否是列表理解所显示的两倍?如果某些计算
很昂贵,我真的不想要这个。(我觉得可能是这样的:(
)
一些计算(x)
,也许可以将其分解为一个常规for循环并附加,但我喜欢理解某些_计算
将计算两次,为了避免这种情况,您可以使用过滤器
放弃错误结果:
li = list(filter(None, (some_computation(x) for x in y)))
或者使用Jon Clements建议的嵌套生成器表达式:
li = [el for el in (some_computation(x) for x in y) if el]
li = [computation(x) for x in y if choose(x)]
或者您必须在if条件下进行迭代,这相当于调用计算两次
def compute(x):
print("Compute...")
return 2*x
y=[1,3,5]
ls=[compute(x) for x in y if compute(x)]
Compute...
Compute...
Compute...
Compute...
Compute...
Compute...
ls=[x代表x in[计算(z)代表y中的z]如果x]
这已经出现过几次了,但似乎找不到它…无论如何…您可以在列表comp中嵌套一个gen exp,例如:
li=[el代表el in(some_func(x)代表x in y),如果el]
…是的,某些计算
函数将在Python 2.x和3中计算两次。x@JonClements我想我在这里找到了:谢谢你的回答!