Сравнение списков, содержащих NaN
Я пытаюсь сравнить два разных списка, чтобы убедиться, что они равны, и собирался удалить NaNs, только чтобы обнаружить, что мои сравнения списков все еще работают, несмотря на то, что NaN == NaN -> False
.
Может кто-нибудь объяснить, почему следующее оценивает True
или False
, поскольку я нахожу это поведение неожиданным. Благодаря,
Я прочитал следующее, которое, похоже, не разрешает проблему:
- Почему в numpy
nan == nan
есть False, а nan in [nan] – правда? - Почему NaN не равен NaN? [дубликат]
(Python 2.7.3, numpy-1.9.2)
Я отметил удивительные оценки с *
в конце
>>> nan = np.nan >>> [1,2,3]==[3] False >>> [1,2,3]==[1,2,3] True >>> [1,2,nan]==[1,2,nan] True *** >>> nan == nan False >>> [nan] == [nan] True *** >>> [nan, nan] == [nan for i in range(2)] True *** >>> [nan, nan] == [float(nan) for i in range(2)] True *** >>> float(nan) is (float(nan) + 1) False >>> float(nan) is float(nan) True ***
- сравнение двух файлов и запись отсутствующих значений в файл
- Сравнить объекты из более чем 2 списков
- Целочисленный диапазон числа сравнения в Python
- Сравните 2 .csv-файлы с Python, затем выводят результаты
- Как сравнить функции python с точки зрения производительности?
Чтобы понять, что здесь происходит, просто замените nan = np.nan
на foo = float('nan')
, вы получите точно такой же результат, почему?
>>> foo = float('nan') >>> foo is foo # This is obviously True! True >>> foo == foo # This is False per the standard (nan != nan). False >>> bar = float('nan') # foo and bar are two different objects. >>> foo is bar False >>> foo is float(foo) # "Tricky", but float(x) is x if type(x) == float. True
Теперь подумайте, что numpy.nan
– это просто имя переменной, которое содержит float('nan')
.
Теперь, почему [nan] == [nan]
просто потому, что сравнение list
сначала проверяет равенство идентичности между элементами до равенства ценности, подумайте об этом как:
def equals(l1, l2): for u, v in zip(l1, l2): if u is not v and u != v: return False return True
- Python добавляет десятичные значения к значениям долготы
- Как установить графический инструмент для Anaconda Python 3.5 на linux-64?
- Как инструмент тестирования графического интерфейса пользователя PyUseCase сравнивается с Dogtail?
- Как сравнить результаты двух файлов CSV в Python с DictReader или Pandas? (Открыта для любых других методов!)
- Как скопировать данные в Python
- Сравнение файлов, когда у меня есть имя хоста
- Каковы основные различия в объектных моделях динамических языков, таких как Smalltalk, Ruby и Python
- PANDAS – объединение двух индексов datetime с разными размерами для сравнения дней и значений
- Правило строки Python всегда возвращает false
- Используйте сравнение Python 2 Dict в Python 3
- Python – Сравнить список списков и выбрать наибольшее значение