Python列表理解:测试函数返回

时间:2012-11-29 18:27:00

标签: python list-comprehension

有没有办法测试列表(或字典)理解中函数的返回?我想避免写那个:

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 ??? ]

2 个答案:

答案 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]

供参考: