2016-11-29 6 views
2

リストの理解カップル日前に質問しました:Elegant way to delete items in a list which do not has substrings that appear in another listこれはジェネレータ式ですか?

とにかく、私は私の質問にすばらしい答えを得ました。これは、リスト内包である:

[p for p in process_list if all(e not in p for e in exclude_list)]

私はアイデアを取得し、私の仕事にそれを適用します。しかし、もし私がe not in p for e in exclude_listの部分を正しく取得するか分からない。私にはジェネレータ表現のように見えますが、わかりません。私は別のポストでこの質問をする方が良いと思います。

これはジェネレータ式ですか?

+4

はいそれはジェネレータ式です。 –

+1

はい。それはジェネレータの表現です: '(これはジェネレータの理解です)'。 – inspectorG4dget

+1

'[...]'を付けずに直接式を渡すと、 'any()'の中には、ジェネレータ式として扱われます。 –

答えて

2

はい、all(e not in p for e in exclude_list)はジェネレータ式を含む呼び出しです。 引数だけがコールに渡されるジェネレータ式では、かっこは省略できます。ここには、all() functionが呼び出されています。 Generator expressions reference documentationから

括弧は、唯一の引数での呼び出しで省略することができます。

この一連の試験の遅延評価を可能にするようにall()関数(並びにコンパニオン機能any()は、多くの場合、ジェネレータ式が与えられるだけの十分なe not in pテストが結果を決定するために実行され;存在する場合任意のe not in p早い偽のテスト、all()戻り、それ以上のテストが実行されません

3

Pythonはそれが何であるかを教えてみましょう:。

>>> p=[] 
>>> exclude_list=[] 
>>> type(e not in p for e in exclude_list) 
<class 'generator'> 
+0

これは素晴らしいアプローチです。しかし私は最初に私を混乱させてしまったのは、 'exclude_listのeのpではない'を 'all()'に渡すことだと思います。そして、これらの括弧は、それがまだジェネレータ表現であるかどうか疑問に思いました。しかし、今はMartijnが彼の答えでそれを説明したので、 – zyc

関連する問題