7

リスト (または dict) 内包表記で関数の戻り値をテストする方法はありますか? 私はそれを書くことを避けたい:

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

2 に答える 2

10

どうですか

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

中間リストを保持したくない場合は、 に置き換えmap()ますitertools.imap()。を使用するとitertools.ifilter()、すべてをジェネレーターに変えることができます。

itertools.ifilter(None, itertools.imap(foo, range(10)))
于 2012-11-29T18:28:52.670 に答える
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]

参考のため:

于 2012-11-29T18:31:44.317 に答える