我想在列表理解中构造一个值,但也要对该值进行过滤。例如:
[expensive_function(x) for x in generator where expensive_function(x) < 5]我想避免每次迭代调用两次expensive_function。
generator可能会返回一个无限系列,并且列表理解不会被懒惰地计算。所以这是行不通的:
[y in [expensive_function(x) for x in generator where expensive_function(x)] where y < 5]我可以用另一种方式来写,但这对于列表理解来说是正确的,而且我确信这是一种常见的使用模式(无论可能与否!)。
发布于 2012-01-07 01:13:58
你应该创建两个生成器表达式:
ys_all = (expensive(x) for x in xs)
ys_filtered = (y for y in ys_all if y <5)或
from itertools import imap, ifilter
ys = ifilter(lambda y : y < 5, imap(expensive, xs))https://stackoverflow.com/questions/8761437
复制相似问题