Pythonのフィルター機能の使い方

前書き ##

Pythonの組み込みの filter()関数は、反復可能なオブジェクト(辞書、リストなど)から特定の要素をフィルター処理し、新しい反復子を生成できます。反復可能なオブジェクトは、「トラバース」できるPythonオブジェクトです。つまり、要素を順番に返し、 forループで使用できるようにします。

filter()関数の基本的な構文は次のとおりです。

filter(function, iterable)

list()関数を使用してリストに変換できる反復可能なフィルターオブジェクトを返します。このリストには、フィルターオブジェクトで返されるすべてのアイテムが含まれます。

filter()関数によって提供されるフィルタリングメソッドは、特に大きなデータセットを扱う場合は、通常、リスト内包表記を使用するよりも効果的です。たとえば、リスト内包表記は新しいリストを生成し、プロセスの実行時間を増やします。リスト内包表記が式の実行を終了すると、メモリ内に2つのリストが作成されます。ただし、 filter()は、元のリストへの参照、提供された関数、および元のリスト内の位置のインデックスを含む単純なオブジェクトを生成するため、操作にかかるメモリは少なくなります。

filter()の4つの異なる使用法は次のとおりです。

**filter() **で特別な関数を使用する##

filter()の最初のパラメーターは関数であり、2番目のパラメーターによって参照される反復可能オブジェクト内の各アイテムの離脱と離脱を決定するために使用されます。この関数が呼び出された後、 Falseが返されると、2番目のパラメーターの反復可能オブジェクトの対応する値が削除されます。この関数の場合、特に式がそれほど複雑でない場合は、通常の関数または「ラムダ」関数にすることができます。

filter()lambda関数を使用する方法は次のとおりです。

filter(lambda item: item[] expression, iterable)

lambda関数の次のリストを使用して、 lambda関数の式に従ってリスト内の要素をフィルタリングします。

creature_names =['Sammy','Ashley','Jo','Olly','Jackie','Charlie']

このリストの母音で始まる水族館の生き物の名前をフィルタリングするための lambda関数は次のとおりです。

print(list(filter(lambda x: x[0].lower()in'aeiou', creature_names)))

ここでは、リスト内の項目を「x」として宣言し、「x [0]」の方法で各文字列の最初の文字にアクセスし、文字を小文字に変換して、 'aeiou'の文字が一致します。

最後に、反復可能なオブジェクト creature_nameを指定します。前のセクションと同様に、 list()を使用して、返された結果をリストテーブルに変換します。

出力は次のとおりです。

[' Ashley','Olly']

もちろん、関数を書くことで同様の結果を得ることができます。

creature_names =['Sammy','Ashley','Jo','Olly','Jackie','Charlie']

def names_vowels(x):return x[0].lower()in'aeiou'

filtered_names =filter(names_vowels, creature_names)print(list(filtered_names))

creature_namesのフィルタリングを完了するために、 names_vowels関数で式が使用されます。

同様に、出力は次のとおりです。

[' Ashley','Olly']

一般に、 filter()関数でラムダ関数を使用した結果は、通常の関数を使用して得られた結果と同じです。フィルタリングするデータがより複雑な場合は、通常の式を使用することもできます。これにより、コードの読みやすさが向上する場合があります。

**filter() ##で None **を使用します

filter()の最初のパラメーターとして Noneを使用して、長さが0のオブジェクト(空のリストや空の文字列など)など、Pythonでブール値が Falseであるオブジェクトをイテレーターがフィルターで除外できるようにすることもできます。または、数値的に0に等しいオブジェクト。

次の例では、リストをフィルタリングして、ブール値が「False」である要素を削除します。

aquarium_tanks =[11, False,18,21,"",12,34,0,[],{}]

filtered_tanks =filter(None, aquarium_tanks)

このコードは filter()でNoneを使用し、 aquarium_tanksリストを反復可能なアイテムとして渡します。最初のパラメータとして Noneを使用すると、リスト内の要素が Falseであるかどうかを確認できます。

print(list(filtered_tanks))

次に、 filtered_tankslist()関数に渡して、リストを取得します。

出力結果からわかるように、必要な整数が得られ、ブール値が「False」であるアイテムが除外されます。

[11,25,18,21,12,34]

注: list()を使用せずに filtered_tanksを出力すると、と同様になります。<filter object at 0x7fafd5903240> そのようなフィルターオブジェクト。フィルタオブジェクトは反復可能であるため、forループを使用して変換するか、 list()を使用してリストに変換できます。

Noneで、filter()を使用して、 Falseと見なされるアイテムをリストからすばやく削除します。

複雑なシーンには filter()を使用します

複雑なデータ構造の場合、 filter()もその役割を果たします。たとえば、辞書のリストがある場合、リスト内の各項目(辞書)だけでなく、辞書内のすべてのキーと値のペアもトラバースする必要があります。すべてのデータを取得するため。

たとえば、水族館にいる各タイプの生き物のリストと、各タイプの生き物のさまざまな詳細があるとします。次のリストを使用して、このデータを表示します。

aquarium_creatures =[{"name":"sammy","species":"shark","tank number":"11","type":"fish"},{"name":"ashley","species":"crab","tank number":"25","type":"shellfish"},{"name":"jo","species":"guppy","tank number":"18","type":"fish"},{"name":"jackie","species":"lobster","tank number":"21","type":"shellfish"},{"name":"charlie","species":"clownfish","tank number":"12","type":"fish"},{"name":"olly","species":"green turtle","tank number":"34","type":"turtle"}]

この関数でデータをフィルタリングするには、以下の関数を記述します。 filter()がすべての辞書と辞書内のすべての要素にアクセスするには、次のようにネストされた関数を作成する必要があります。

def filter_set(aquarium_creatures, search_string):
 def iterator_func(x):for v in x.values():if search_string in v:return True
  return False
 returnfilter(iterator_func, aquarium_creatures)

aquarium_creatures search_stringをパラメーターとして filter_set()関数を定義します。 filter_set()で、内部関数 iterator_func()filter()のパラメーターとして使用します。 filter_set()関数は、 filter()によって生成されたイテレーターを返します。

iterator_func()は、 xをパラメーターとして受け取ります。これは、リスト内の項目(つまり、単一の辞書)を表します。

次に、 forは辞書内の各キーと値のペアをループし、条件ステートメントを使用して、 search_stringがキーと値のペアの値であることを確認します。

iterator_func関数は、反復オブジェクトをフィルタリングするための filter関数のパラメーターオブジェクトとして使用されます。例: filter_set()を使用して文字列を検索します。

filtered_records =filter_set(aquarium_creatures,"2")

関数が実行されると、フィルター[オブジェクトストレージ](https://cloud.tencent.com/product/cos?from=10680)が filtered_records変数に含まれ、リストに変換して出力します。

print(list(filtered_records))

出力内容:

[{' name':'ashley','species':'crab','tank number':'25','type':'shellfish'},{'name':'jackie','species':'lobster','tank number':'21','type':'shellfish'},{'name':'charlie','species':'clownfish','tank number':'12','type':'fish'}]

前の例では、 filter()を使用して、辞書のリスト内の指定された文字をフィルタリングしました。

結論として ##

この記事では、 filter()関数を使用するさまざまな方法を示します。詳細については、「Python University Practical Course」(Electronic Industry Press)をお読みください。これは、エンジニアリングの実践に特に重点を置いたゼロスタートの読者にとっては珍しい読み物です。

Recommended Posts

Pythonのフィルター機能の使い方
pythonのヘルプ機能の使い方
pythonでround関数を使用する方法
Pythonでzip関数を使用する方法
pythonでformat関数を使用する方法
パイソンタプルの使い方
ubuntuでhanlpを使用する方法
pythonスレッドプールの使用方法
pythonで数値をフィルタリングする方法
PythonでSQLiteを使用する方法
およびおよびまたはPythonでの使用方法
PYTHONを使用してニュース記事をクロールする方法
pythonでid関数を実行する方法
Ubuntu16.04でSambaサーバーを使用する方法
Prometheusを使用してUbuntu14.04サーバーを監視する方法
UbuntuでTensorFlow使用環境を構成する方法
CentOS7にDockerをインストールして使用する方法
Ubuntu16.04でNginxのマップモジュールを使用する方法
Ubuntu20.04にDockerをインストールして使用する方法
Ubuntuシステムでdpkgコマンドを使用する方法
Ubuntu18.04にCurlをインストールして使用する方法
Ubuntu18.04にComposerをインストールして使用する方法
Ubuntu18.04にWineをインストールして使用する方法
Ubuntu14.04でDockerデータボリュームを使用する方法
CentOS8にComposerをインストールして使用する方法
pythonでアシスタントを実行するコードを使用する方法
Ubuntu20.04にComposerをインストールして使用する方法
Ubuntu14.04にBaasBoxをインストールして使用する方法
Jenkinsを使用してUbuntuで自動的にビルドする方法
Ubuntu16.04にPostgreSQLをインストールして使用する方法
CentOS8にCurlをインストールして使用する方法
Ubuntu16.04にDockerをインストールして使用する方法
LVMを使用してUbuntu18.04でストレージデバイスを管理する方法
Ubuntu14.04でMongoDBバックアップを作成して使用する方法
Ubuntu20.04にアップグレードする方法
Ubuntu18.04にMySQLWorkbenchをインストールして使用する方法
Puttyを使用してVirtualBoxにインストールされているubuntuにログインする方法
CentOS 8 / RHEL8にCockpitをインストールして使用する方法
Let&#39;sEncryptを使用してCentOS8でNginxを保護する方法
Ubuntu20.04にアップグレードする方法
pythonコードにコメントする方法
Pythonicコードの書き方
pythonをすばやく学ぶ方法
pythonプラグインをアンインストールする方法
PythonがFTP機能を実装する方法
pythonオブジェクトを理解する方法
virtualboxを使用してubuntuをデプロイします
Ubuntu 16.04LTSにアップグレードする方法
UbuntuClass |キーリングとは何ですか?その使用方法は?