有没有办法测试列表(或字典)理解中函数的返回?我想避免写那个:
lst = []
for x in range(10):
bar = foo(x)
if bar:
lst.append(bar)
并改为使用列表理解。显然,我不想写:
[foo(x) for x in range(10) if foo(x)]
所以?
[foo(x) for x in range(10) if ??? ]
答案 0 :(得分:10)
怎么样
filter(None, map(foo, range(10)))
如果您不想保留中间列表,请将map()
替换为itertools.imap()
。使用itertools.ifilter()
,整个事物可以变成一个生成器。
itertools.ifilter(None, itertools.imap(foo, range(10)))
答案 1 :(得分:5)
只需创建一个生成器来计算值,然后从生成器构建过滤后的列表。
示例:
# create generator via generator expression
results = (foo(x) for x in xrange(10))
# build result list, not including falsy values
filtered_results = [i for i in results if i]
供参考: