はじめに
nanの値を取得したいときは、普通はnumpyを使うと思います。
>>> import numpy as np >>> np.nan nan
まあ、そんなシチュエーションそもそもあまりないという話ですが。じゃあ、numpyがないときは?
即答できる人はあまりいないと思います。
リテラルでnanと書いても受け付けられない
できそうですが、できません。
>>> nan Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'nan' is not defined
変数名とみなされます。しょうがないですね。
nanはfloatである
nanは浮動小数点数の規格(IEEE 754 - Wikipedia)で定義されています。つまりPythonにおいてはfloatです。
>>> type(np.nan) <class 'float'>
標準の型で表現できる訳で、あとはどうやって連れてくるかですね。
mathから呼ぶ
標準のmathモジュールはありがたいことに、nanを属性として持っています。numpyと同じです。
>>> import math
>>> math.nan
nan
この方法がスマートでしょうか。でも、そのためだけにimportするのがだるいときもありますよね。
文字列→floatの変換で作る
たとえば、
>>> int("3") 3
のように文字列型→整数型の変換ができることは皆さんご存知だと思います。floatでも同じことができて、
>>> float("3.14") 3.14
という操作が可能です。
ここで理解した人もいると思いますが、以下のようにするとnanをゲットできます。
>>> float("nan") nan
タイプ数が若干多いですが、import不要です。でも、ちょっとトリッキーかも。あと、パフォーマンス上は当然不利なはずです。
便利に使う
ゲットしたnanを変数に入れておくと、リテラルっぽく使えます。同名変数を定義しないのは当然ですが。
>>> nan = float("nan") >>> [1.0, nan, 3.0] [1.0, nan, 3.0]
でもかえって可読性を落とす(nanの宣言から離れていると一見動かなさそうに見える。あるいは、nanのリテラルがあるという勘違いを生む)気もするので、使わない方が良いかも。
まとめ
というようにゲットできますので、numpyないんだけどnanを扱わないといけないという悪夢のような目に遭っている人は試してみてください。それか、おとなしくnumpyをインストールしてください。