PipePipeを使った最適化コードの書き方を学ぶPythonプログラミング
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の他の記事で詳しく解説しています
関連
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み] モジュールに属性がない
-
[解決済み] Pythonにおけるεの値
-
[解決済み] 「ゼロで割っていない時に「ログでゼロで割るが発生しました。
-
[解決済み] プロジェクト・オイラー第13回理解講座(Python編)
-
[解決済み] 悪いマジックナンバーエラーって何?
-
[解決済み] virtualenvの問題 - 起動できない
-
[解決済み] discord.pyでボットに自分自身のメッセージを編集させる方法
-
[解決済み] 2つのリスト(お互いを参照している)を全く同じ方法でソートする方法
-
python error ランチャーで致命的なエラーが発生しました。解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Pytorch AssertionError: CUDAを有効にした状態でTorchがコンパイルされていない
-
[解決済み] matplotlib: RuntimeError: Python はフレームワークとしてインストールされていません
-
[解決済み] pandasで1つの列を除くすべての列を選択する方法は?
-
[解決済み] Python sqlite3.OperationalError: そのようなテーブルがありません。
-
[解決済み] matplotlibのタイトレイアウトを図と一緒に使うには?
-
[解決済み] シーボーン・ヒートマップ・キーワード
-
[解決済み] 値でリストをグループ化する
-
[解決済み] statsmodelsのOLSフィットで、パラメータが1つしか得られないのはなぜですか?
-
[解決済み] discordのリッチエンベッドでgifを埋め込む方法。
-
エラー:イテレータはバイトではなく文字列を返すべき(ファイルをテキストで開いたか?