111

非常に長いリスト内包表記をどのように分割することになっていますか?

[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]

また、行を分割するために「\」を使用することを嫌う人々がどこかで見たことがありますが、その理由は理解できませんでした。この背後にある理由は何ですか?

4

3 に答える 3

160
[x
 for
 x
 in
 (1,2,3)
]

正常に動作するので、ほとんど好きなように実行できます。個人的には好きです

 [something_that_is_pretty_long
  for something_that_is_pretty_long
  in somethings_that_are_pretty_long]

\あまり評価されない理由は、行の終わりに表示されるためです。この場合、目立たないか、追加のパディングが必要になります。これは、行の長さが変更されたときに修正する必要があります。

x = very_long_term                     \
  + even_longer_term_than_the_previous \
  + a_third_term

このような場合は、parensを使用してください。

x = (very_long_term
     + even_longer_term_than_the_previous
     + a_third_term)
于 2011-04-27T18:56:41.197 に答える
25

複数のデータ構造のリストを扱っている場合は、複数のインデントを利用することもできます。

new_list = [
    {
        'attribute 1': a_very_long_item.attribute1,
        'attribute 2': a_very_long_item.attribute2,
        'list_attribute': [
            {
                'dict_key_1': attribute_item.attribute2,
                'dict_key_2': attribute_item.attribute2
            }
            for attribute_item
            in a_very_long_item.list_of_items
         ]
    }
    for a_very_long_item
    in a_very_long_list
    if a_very_long_item not in [some_other_long_item
        for some_other_long_item 
        in some_other_long_list
    ]
]

if ステートメントを使用して別のリストにフィルター処理する方法にも注意してください。if ステートメントを独自の行にドロップすることも役立ちます。

于 2012-02-17T21:41:41.483 に答える
24

私は反対ではありません:

variable = [something_that_is_pretty_long
            for something_that_is_pretty_long
            in somethings_that_are_pretty_long]

この場合は必要ありません\\一般的に、少し醜いので避ける人が多いと思いますが、行の最後の部分でない場合は問題が発生する可能性があります (その後に空白がないことを確認してください)。ただし、行の長さを抑えるためには、使用しないよりは使用する方がはるかに優れていると思います。

上記\の場合、または括弧で囲まれた式の場合は必要ないため、実際に使用する必要があることはかなりまれです。

于 2011-04-27T18:58:15.543 に答える