1. ホーム
  2. スクリプト・コラム
  3. パイソン

PipePipeを使った最適化コードの書き方を学ぶPythonプログラミング

2022-01-26 06:40:05

mapとfilterは、反復可能なオブジェクトを扱うためのPythonの有効な2つのメソッドであることが分かっています。

しかし、mapとfilterの両方を使うと、コードが混乱することがあります。

パイプが使えたらいいと思いませんか?以下のようにやってください。

Pipeライブラリで可能です。

パイプとは何ですか?

PipeはPythonのライブラリで、Pythonでパイプを使用することができます。

パイプ (|) は、あるメソッドの結果を別のメソッドに渡します。

Pythonの反復可能なオブジェクトに複数のメソッドを適用するときに、コードがきれいに見えるので、私はPipeが好きです。Pipeはいくつかのメソッドしか提供しないので、Pipeの学習も簡単です。この記事では、私が最も便利だと思うメソッドをいくつか紹介します。

Pipeをインストールするには、Enterを押します。

Host Link name
    HostName Enter server ip address
    User username


どこで 反復可能なオブジェクトの要素をフィルタリングする

SQL と同様に、Pipe の where メソッドは反復処理可能なオブジェクトの要素をフィルタリングするために使用することができます。

選択します。イテレート可能なオブジェクトに関数を適用する

selectメソッドはmapメソッドと似ています。

selectは反復可能な各要素にメソッドを適用します。

次のコードでは、selectを使ってリストの各要素を2倍しています。

さて、mapとfilterが同じ機能を持っているのに、なぜwhereとselectメソッドが必要なのか、疑問に思うかもしれません。

これは、パイプを使うことで、あるメソッドを別のメソッドの後に挿入することができるからです。つまり、パイプを使うことでネストした括弧をなくし、コードを読みやすくすることができるのです。

反復処理可能なオブジェクトの展開

1. チェーンメソッド

ネストされた反復可能オブジェクトを使うのは面倒なことです。幸いなことに、chain を使って一連の反復可能オブジェクトを連結することができる。

chainを適用することで反復可能なオブジェクトのネストを少なくすることができますが、それでもより強力なツールが必要です。深くネストされたリストを扱うには、代わりにtraverseを使うことができます。

2. traverse: イタラブルオブジェクトを再帰的に展開する

traverseメソッドを使用すると、反復可能なオブジェクトを再帰的に展開することができます。このメソッドを使うと、深くネストされたリストをフラットリストに変換することができます。

このメソッドをselectメソッドと統合して、辞書の値を取得し、リストを平坦化してみましょう。

この扱い方、カッコイイと思いませんか?

リスト内の要素をグループ化する

特定の関数を使用してリストの要素をグループ化すると便利な場合があります。これはgroupbyメソッドで簡単に実現できます。

このメソッドがどのように機能するかを見るために、数字のリストを偶数か奇数かに基づいて数字をグループ化する辞書に変えてみましょう。

上記のコードでは、groupbyを使って数字を偶数と奇数のグループに分けています。このメソッドを適用した後の出力は以下のようになります。

/home/user/.ssh

次に、selectを使ってタプルリストから辞書リストに変換します。キーはタプルの最初の要素で、値はタプルの2番目の要素です。

config

2より大きい値だけを取得するには、selectメソッドにwhereメソッドを追加すればよい。

dedup メソッドは、リストから重複する項目を削除します。

setメソッドでも同じことができるので、これは面白くないと思われるかもしれません。しかし、この方法はより柔軟で、ユニークな要素を取得することができます。

例えば、このメソッドを使って、5より小さいユニークな要素と、5以上のユニークな要素を得ることができます。

では、このメソッドとselectを組み合わせて、キーが重複し、Noneの値を持つ辞書の値をどこから取得するか、考えてみましょう。

上のコードでは

  • 同じ名前の項目を削除する
  • カウント値の取得
  • 整数値のみを選択する。

数行のコードで、反復可能なオブジェクトに複数のメソッドを適用して、コードを整頓することができますね?

まとめ

パイプラインを利用して、コードをすっきりシンプルに保つ方法を学びました。この記事では、反復可能なオブジェクトに対する複雑な操作は、実際にはシンプルな1行のコードで済むことを示せたと思います。

PythonのPipeを使ったエレガントなコードの書き方については、Scripterの他の記事で詳しく解説しています