Python列表理解:测试函数返回(Python list comprehension: test

2019-07-04 06:15发布

有没有一种方法来测试功能的列表(或字典)理解回归? 我想避免编写:

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

Answer 1:

怎么样

filter(None, map(foo, range(10)))

如果你不希望保留中间列表,更换map()itertools.imap() 并与itertools.ifilter()整个事情也可以变成一台发电机。

itertools.ifilter(None, itertools.imap(foo, range(10)))


Answer 2:

只是做一个发电机来计算的值,然后建造从发电机过滤列表。

例:

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

以供参考:

  • https://docs.python.org/3/glossary.html#term-generator
  • https://wiki.python.org/moin/Generators
  • https://www.python.org/dev/peps/pep-0289/


文章来源: Python list comprehension: test function return