23
21

More than 5 years have passed since last update.

Pythonで内包表記をインデントする

Posted at

Pythonの内包表記は便利ですが、ちょっと複雑なことをしようとすると、多段階にネストすることになってしまいます。そして、ネストすると可読性が著しく落ちます。このため、ネストの階層が深くなったら、ブロック表記に書きなおしている人も多いのではないかと思います。

しかし、ルールを決めてインデントすれば、ネストしても可読性を損ないません。たとえば以下のような形です。

itemList = [
    (item.name, item.price)
    for item in record.items()
    for purchase in purchases
    if purchase.campaignName in {
        campaign.name
        for campaign in camapigns
    } and purchase.date > datetime.date.today() - datetime.timedelta(days = 7)
]
  1. 内包表記の外側の括弧のインデントを揃え、中身を一つインデントさせる。
  2. 要素, for句, (for句)...,(if句)で分割する。

ちょっと慣れは必要かもしれませんが、慣れればブロック表記よりもずっと読みやすくなります。ブロック表記だと、内包表記では不必要なリスト保存用の変数が増えて可読性が落ちることを考えると、内包表記で無制限にネストできることのメリットはかなり大きいと思います。

23
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
21