TL;DR
PythonでもPyFunctionalってライブラリ入れれば楽に配列操作できるよってお話
注意書き
この記事は基本的にPython3の話です。
インストール方法
pip3 install pyfunctional
使用例
例えば、0から9までの数字で偶数のものを2乗した配列が欲しいとします。 (お題は適当に考えたから深く気にしないで)
例:Ruby
Rubyだと以下のように書けます。 すごく楽でいいです:relaxed:
numbers = (0..9).select { |n| n % 2 == 0 }.map { n * n } print numbers # [0, 4, 16, 36, 64]
例:JavaScript
JavaScriptだとこうなります。 JavaScriptにも連番作る関数ください。
var numbers = [...Array(10).keys()] .filter(n => n % 2 == 0) .map(n => n * n) console.log(numbers) // [0, 4, 16, 36, 64]
例:Python
pythonだと以下のようになります。 辛い……:sob:
numbers = [] for n in range(10): if (n % 2 == 0): numbers.append(n * n) print(numbers) # [0, 4, 16, 36, 64]
例:Python(lambda)
lambdaを使うと以下のようになります。 括弧の対応も改行どこでしていいのかもわからない……:sob:
numbers = list(map(lambda n: n * n, filter(lambda n: n % 2 == 0, range(10)))) print(numbers) # [0, 4, 16, 36, 64]
例:Python + PyFunctional
満を持して、PyFunctionalを使うとRubyやJSのようにメソッドチェーンで書けます。
from functional import seq # 改行のために括弧で挟む。 numbers = (seq(range(10)) .filter(lambda n: n % 2 == 0) .map(lambda n: n * n) ) # 括弧じゃないほうがいいなら、行末にバックスラッシュをつける。 numbers = seq(range(10))\ .filter(lambda n: n % 2 == 0)\ .map(lambda n: n * n) print(numbers) # [0, 4, 16, 36, 64]
使い方を簡単に言うと、seq
に配列を渡して、それに必要なメソッドをチェーンしていく感じです。
感覚はRubyと同じですよね。
使えるメソッドに関してはGithubにある公式リポジトリで確認してください。 PyFunctional - Github
まとめ
PyFunctionalで快適な配列ライフを!:grin: