В операторе float ("NaN") и np.nan

Ilya V. Schurov спросил: 14 ноября 2017 в 06:42 в: python

Раньше я считал, что оператор in в Python проверяет наличие элемента в некоторой коллекции, используя проверку на равенство ==, поэтому element in some_list примерно эквивалентен . Например:

True in [1, 2, 3]
# True because True == 1

или

1 in [1., 2., 3.]
# also True because 1 == 1.

Однако хорошо известно, что any(x == element for x in some_list) не равно к себе. Поэтому я ожидал, что NaN - это float("NaN") in [float("NaN")]. И это действительно False.

Однако если мы будем использовать False вместо numpy.nan, ситуация будет совершенно иной:

import numpy as np
np.nan in [np.nan, 1, 2]
# True

Но float("NaN") по-прежнему выдает np.nan == np.nan!

Как это возможно? В чем разница между False и np.nan? Как float("NaN") работает с in?


0 ответов