有没有一种方法来测试功能的列表(或字典)理解回归? 我想避免编写:
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 ??? ]
有没有一种方法来测试功能的列表(或字典)理解回归? 我想避免编写:
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 ??? ]
怎么样
filter(None, map(foo, range(10)))
如果你不希望保留中间列表,更换map()
与itertools.imap()
并与itertools.ifilter()
整个事情也可以变成一台发电机。
itertools.ifilter(None, itertools.imap(foo, range(10)))
只是做一个发电机来计算的值,然后建造从发电机过滤列表。
例:
# 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]
以供参考: