はじめに
今回はネタでフィボナッチ数列をワンライナーしてみたのでそのコードの軽い解説的な感じです。
ワンライナーってロマンありますよね。
そんな毒にも薬にもならない記事になっております。
コード
fibo.py
[(lambda n:functools.reduce(lambda x,y:(x[0]+x[1],x[0]),[(1,1)]*(n-2))[0])(int(input())) for functools in [__import__('functools')]]
解説
特に難しいことはなくて、見たままのコードですが順番に
[lambda n:functools.reduce("残りの処理")(int(input())) for functools in [__import__('functools')]]
この部分ではlambda式の引数nにinputを代入しています。右側のimportでfunctoolsライブラリを入れています。
reduce関数は畳み込み演算を行う関数です。
list内包表記でimportするやり方は普通に書く時には使わないようにしましょう。
[(lambda x, y:(x[0] + x[1]. x[0]*(n-2)[0]), [(1, 1)*(n-2)[0]])]
これが実際の畳み込み演算の中身です。
最初の引数nまで順番に足し合わせます。
まとめ
最近、Pythonって内包表記とか三項演算子で結構ワンライナーしやすくて面白いなと思います。
皆さんも複雑な数列をワンライナーしてみてはいかがでしょうか。