メインコンテンツへスキップ

PythonのR1721(不要な内包表記)を抑制する

·630 文字·2 分
目次

はじめに
#

PythonでPylintを使用したときに表示されるリファクタリングメッセージR1721(不要な内包表記)を抑制する方法を解説します。

Pythonの内包表記は処理が高速なためよく使用しますが、冗長になる場合があります。静的解析ツールPylintを使用すると、R1721として表示されます。Rはコードをリファクタリングすべきことを意味します。

この記事で検証したバージョンは以下の通りです。

  • OS: Windows 10 Home
  • Python 3.11.6
  • Pylint 3.0.2

辞書 (dict) 内包表記と集合 (set) 内包表記を例に示します。

辞書内包表記のR1721
#

以下のような辞書内包表記で、辞書を作るスクリプトを例に示します。

array = ["a", "b", "c"]

d = {i:v for i,v in enumerate(array)}
# d = {0: 'a', 1: 'b', 2: 'c'}

これをPylintで解析すると、以下の結果になります。

R1721: Unnecessary use of a comprehension, use dict(enumerate(array)) instead. (unnecessary-comprehension)

内包表記ではなく、組込み関数のdict()を使用せよと表示されます。辞書のキーを処理せずにそのまま使用する場合、R1721が出力されます。リファクタリング後のコードは以下になります。

array = ["a", "b", "c"]

d = dict(enumerate(array))

集合内包表記のR1721
#

以下のような集合内包表記で、集合を作るスクリプトを例に示します。

array2 = ["a", "a", "b", "c", "c"]

s = {a for a in array2}
# s = {'a', 'b', 'c'}

これをPylintで解析すると、以下の結果になります。

R1721: Unnecessary use of a comprehension, use set(array2) instead. (unnecessary-comprehension)

内包表記ではなく、組込み関数のset()を使用せよと表示されます。要素を処理せずにそのまま使用する場合、R1721が出力されます。リファクタリング後のコードは以下になります。

array2 = ["a", "a", "b", "c", "c"]

s = set(array2)
Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

Pythonの統合開発環境Spyderの起動を高速化する
·426 文字·1 分
Pythonの統合開発環境Spyderのプラグインを無効化して、起動を高速化する方法を説明します。
【Python】PylintのW0611 (unused-import) などのメッセージを抑制する
·1496 文字·3 分
Pythonのコード分析ツールPylintから出力されるメッセージを抑制する方法について、W0611 (unused-import)警告を例に解説します。
Scikit-learnのDecisionTreeClassifierクラスによる分類木
·3865 文字·8 分
分類木 (classification tree) は、分析したデータが属するカテゴリー(クラス)を予測する分類アルゴリズムの1つです。分類木では、Yes/Noによる分岐を何度か繰り返して、分類の予測を返します。
Cloudflare Pages上でSphinxサイトを自動デプロイする
·2235 文字·5 分
静的サイトホスティングサービスのCloudflare Pages上でドキュメント生成ツールSphinxを自動デプロイする手順を備忘録としてまとめました。
Sphinxでサイトマップを作る
·812 文字·2 分
Sphinxでサイト構造を示すサイトマップ (sitemap.xml) を作成する方法をまとめました。
Pythonのclassmethodとstaticmethodの使い分け
·1611 文字·4 分
Pythonのクラスにおいて、インスタンスメソッドとクラスメソッド (classmethod), スタティックメソッド (staticmethod) を使い分ける方法をまとめました。