我在列表理解中使用了一个函数,并使用了一个if函数:
new_list = [f(x) for x in old_list if f(x) !=0]
令我烦恼的是,表达式f(x)
在每个循环中计算了两次。
有更干净的方法吗?在列表理解的开头存储值或包含if语句的内容。
发布于 2019-07-10 01:18:57
预先计算结果并迭代它们。
new_list = [x for x in map(f, old_list) if x !=0]
此外,由于map在访问元素时计算每个元素的结果,所以这只是一个循环。
发布于 2019-07-10 01:24:43
您可以在列表理解中使用生成器表达式(以避免创建不必要的列表):
new_list = [fx for fx in (f(x) for x in old_list) if fx != 0]
从python3.8开始,您将能够执行这
new_list = [fx for x in old_list if (fx := f(x)) != 0]
发布于 2019-07-10 01:19:04
在Python3.8中,我们将拥有“海象操作员”并能够做到这一点!
[y for x in old_list if (y := f(x)) != 0]
https://stackoverflow.com/questions/56967363
复制相似问题