1

私はよくこれに似たコードを見ます:

return [(var, val) for val in self.domains[var]
                    if self.nconflicts(var, val, assignment) == 0]

そして私はセクシーなDAMNのようです。しかし、時々それを削除しようとすると、構文エラーが発生します。forおよびifステートメントの一般的な配置を逆にする、この優れた形式のコード記述に関する特定のルールはありますか?

4

4 に答える 4

6

それらはリスト内包と呼ばれます。基本的な構文は次のとおりです(構文の一部としてではなく、括弧を使用して単語をグループ化します)。

[(an expression involving x) for x in someList if (some condition)]

評価がtrueの場合condition、結果のリストには。が含まれます(expression involving x)。したがって、たとえば、次のリスト内包表記では、これを使用して、結果のリストに文字列のみを含めます。

>>> myList = [1,"hello",5.4,"world"]
>>> [elem for elem in myList if type(elem)==str]
['hello', 'world']

このif部分はオプションであり、expression involving x単純なものにすることができることに注意してくださいx(別のリストから要素を除外する場合によく使用されます)。

実際、は実際にexpression involving xはまったく含まれている必要はありませんx。たとえば、何らかの理由で0自分の名前である限りのリストが必要な場合は、次のように実行できます。

>>> [0 for letter in "Matthew"]
[0, 0, 0, 0, 0, 0, 0]

リストを作成した後でリストを保持する必要がない場合は、代わりにジェネレータ式を使用してください。(ジェネレータ式とリスト内包表記の構文は同じです。)

于 2012-10-19T03:33:53.730 に答える
2

Pythonチュートリアルドキュメントのリスト内包表記を参照してください。リスト、セット、辞書の作成など、この構文でできることはたくさんあります。

于 2012-10-19T03:33:45.670 に答える
2

この概念はリスト内包表記と呼ばれ、

http://www.secnetix.de/olli/Python/list_comprehensions.hawk

ラムダ関数も見てください、

http://www.secnetix.de/olli/Python/lambda_functions.hawk

于 2012-10-19T03:35:01.440 に答える
2

サンプルコードは確かにリスト内包表記ですが、インライン条件の構文が逆の場合もあります。

a if b else c
于 2012-10-19T03:39:24.900 に答える