我試圖比較兩個不同的列表以查看它們是否相等,並且要刪除NaN,但僅發現列表比較仍然有效,儘管NaN == NaN -> False
。比較包含NaN的列表
有人可以解釋爲什麼以下評估True
或False
,因爲我發現這種行爲出乎意料。謝謝,
我看過這似乎並沒有解決問題的情況如下:
- Why in numpy
nan == nan
is False while nan in [nan] is True? - Why is NaN not equal to NaN? [duplicate]
(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 ***
這完全是在你鏈接的第一篇文章解釋 - 當你測試平等的兩個名單,身份在平等之前被測試並且'nan是nan'是'真實的'因爲'nan'和'nan'是同一個對象。 – Holt
@霍爾特,但在這種情況下如何定義身份,因爲沒有像'alist = [nan]'這樣的聲明?莫名其妙地發生在記憶中嗎? –
@Holt,在這種情況下,我發現以下令人驚訝的事情,因爲我認爲'float'會創建一個新實例,我認爲'float(nan)== float(nan)'是'False',但它是'True',而'float(nan)是(float(nan)+ 1) - > False'。 – oliversm